foldkit 0.87.0 → 0.88.1
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/command/index.d.ts +60 -13
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +41 -16
- package/dist/command/public.d.ts +1 -1
- package/dist/command/public.d.ts.map +1 -1
- package/dist/devTools/overlay.d.ts +44 -20
- package/dist/devTools/overlay.d.ts.map +1 -1
- package/dist/devTools/overlay.js +119 -78
- package/dist/devTools/protocol.d.ts +48 -11
- package/dist/devTools/protocol.d.ts.map +1 -1
- package/dist/devTools/protocol.js +8 -3
- package/dist/devTools/serialize.d.ts +8 -2
- package/dist/devTools/serialize.d.ts.map +1 -1
- package/dist/devTools/serialize.js +11 -2
- package/dist/devTools/store.d.ts +8 -4
- package/dist/devTools/store.d.ts.map +1 -1
- package/dist/devTools/store.js +6 -6
- package/dist/devTools/webSocketBridge.d.ts.map +1 -1
- package/dist/devTools/webSocketBridge.js +2 -2
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +12 -5
- package/dist/test/apps/counter.d.ts +14 -13
- package/dist/test/apps/counter.d.ts.map +1 -1
- package/dist/test/apps/counter.js +6 -3
- package/dist/test/apps/formChild.d.ts +4 -17
- package/dist/test/apps/formChild.d.ts.map +1 -1
- package/dist/test/apps/formChild.js +4 -6
- package/dist/test/apps/login.d.ts +3 -6
- package/dist/test/apps/login.d.ts.map +1 -1
- package/dist/test/apps/login.js +2 -3
- package/dist/test/apps/resumeUpload.d.ts +9 -7
- package/dist/test/apps/resumeUpload.d.ts.map +1 -1
- package/dist/test/apps/resumeUpload.js +4 -6
- package/dist/test/internal.d.ts +58 -13
- package/dist/test/internal.d.ts.map +1 -1
- package/dist/test/internal.js +121 -39
- package/dist/test/scene.d.ts +14 -3
- package/dist/test/scene.d.ts.map +1 -1
- package/dist/test/scene.js +21 -15
- package/dist/test/story.d.ts +15 -5
- package/dist/test/story.d.ts.map +1 -1
- package/dist/test/story.js +22 -15
- package/dist/ui/animation/update.d.ts +7 -5
- package/dist/ui/animation/update.d.ts.map +1 -1
- package/dist/ui/animation/update.js +6 -8
- package/dist/ui/calendar/index.d.ts +7 -8
- package/dist/ui/calendar/index.d.ts.map +1 -1
- package/dist/ui/calendar/index.js +7 -10
- package/dist/ui/calendar/public.d.ts +1 -1
- package/dist/ui/calendar/public.d.ts.map +1 -1
- package/dist/ui/calendar/public.js +1 -1
- package/dist/ui/combobox/multi.d.ts +1 -0
- package/dist/ui/combobox/multi.d.ts.map +1 -1
- package/dist/ui/combobox/shared.d.ts +32 -17
- package/dist/ui/combobox/shared.d.ts.map +1 -1
- package/dist/ui/combobox/shared.js +17 -28
- package/dist/ui/combobox/single.d.ts +1 -0
- package/dist/ui/combobox/single.d.ts.map +1 -1
- package/dist/ui/dialog/index.d.ts +10 -5
- package/dist/ui/dialog/index.d.ts.map +1 -1
- package/dist/ui/dialog/index.js +11 -10
- package/dist/ui/disclosure/index.d.ts +5 -3
- package/dist/ui/disclosure/index.d.ts.map +1 -1
- package/dist/ui/disclosure/index.js +3 -3
- package/dist/ui/dragAndDrop/index.d.ts +14 -7
- package/dist/ui/dragAndDrop/index.d.ts.map +1 -1
- package/dist/ui/dragAndDrop/index.js +19 -8
- package/dist/ui/listbox/multi.d.ts +1 -0
- package/dist/ui/listbox/multi.d.ts.map +1 -1
- package/dist/ui/listbox/shared.d.ts +40 -21
- package/dist/ui/listbox/shared.d.ts.map +1 -1
- package/dist/ui/listbox/shared.js +21 -34
- package/dist/ui/listbox/single.d.ts +1 -0
- package/dist/ui/listbox/single.d.ts.map +1 -1
- package/dist/ui/menu/index.d.ts +40 -22
- package/dist/ui/menu/index.d.ts.map +1 -1
- package/dist/ui/menu/index.js +25 -37
- package/dist/ui/popover/index.d.ts +26 -16
- package/dist/ui/popover/index.d.ts.map +1 -1
- package/dist/ui/popover/index.js +14 -21
- package/dist/ui/radioGroup/index.d.ts +6 -3
- package/dist/ui/radioGroup/index.d.ts.map +1 -1
- package/dist/ui/radioGroup/index.js +5 -10
- package/dist/ui/tabs/index.d.ts +6 -3
- package/dist/ui/tabs/index.d.ts.map +1 -1
- package/dist/ui/tabs/index.js +13 -23
- package/dist/ui/toast/index.d.ts +4 -0
- package/dist/ui/toast/index.d.ts.map +1 -1
- package/dist/ui/toast/update.d.ts +11 -3
- package/dist/ui/toast/update.d.ts.map +1 -1
- package/dist/ui/toast/update.js +8 -4
- package/dist/ui/tooltip/index.d.ts +6 -3
- package/dist/ui/tooltip/index.d.ts.map +1 -1
- package/dist/ui/tooltip/index.js +2 -4
- package/dist/ui/virtualList/index.d.ts +7 -3
- package/dist/ui/virtualList/index.d.ts.map +1 -1
- package/dist/ui/virtualList/index.js +15 -4
- package/package.json +7 -5
|
@@ -165,25 +165,25 @@ export const closedModel = (model) => constrainedEvo(model, {
|
|
|
165
165
|
maybeLastButtonPointerType: () => Option.none(),
|
|
166
166
|
});
|
|
167
167
|
/** Prevents page scrolling while the listbox is open in modal mode. */
|
|
168
|
-
export const LockScroll = Command.define('LockScroll', CompletedLockScroll);
|
|
168
|
+
export const LockScroll = Command.define('LockScroll', CompletedLockScroll)(Dom.lockScroll.pipe(Effect.as(CompletedLockScroll())));
|
|
169
169
|
/** Re-enables page scrolling after the listbox closes. */
|
|
170
|
-
export const UnlockScroll = Command.define('UnlockScroll', CompletedUnlockScroll);
|
|
170
|
+
export const UnlockScroll = Command.define('UnlockScroll', CompletedUnlockScroll)(Dom.unlockScroll.pipe(Effect.as(CompletedUnlockScroll())));
|
|
171
171
|
/** Marks all elements outside the listbox as inert for modal behavior. */
|
|
172
|
-
export const InertOthers = Command.define('InertOthers', CompletedSetupInert);
|
|
172
|
+
export const InertOthers = Command.define('InertOthers', { id: S.String }, CompletedSetupInert)(({ id }) => Dom.inertOthers(id, [buttonSelector(id), itemsSelector(id)]).pipe(Effect.as(CompletedSetupInert())));
|
|
173
173
|
/** Removes the inert attribute from elements outside the listbox. */
|
|
174
|
-
export const RestoreInert = Command.define('RestoreInert', CompletedTeardownInert);
|
|
174
|
+
export const RestoreInert = Command.define('RestoreInert', { id: S.String }, CompletedTeardownInert)(({ id }) => Dom.restoreInert(id).pipe(Effect.as(CompletedTeardownInert())));
|
|
175
175
|
/** Moves focus back to the listbox button after closing. */
|
|
176
|
-
export const FocusButton = Command.define('FocusButton', CompletedFocusButton);
|
|
176
|
+
export const FocusButton = Command.define('FocusButton', { id: S.String }, CompletedFocusButton)(({ id }) => Dom.focus(buttonSelector(id)).pipe(Effect.ignore, Effect.as(CompletedFocusButton())));
|
|
177
177
|
/** Moves focus to the listbox items container after opening. */
|
|
178
|
-
export const FocusItems = Command.define('FocusItems', CompletedFocusItems);
|
|
178
|
+
export const FocusItems = Command.define('FocusItems', { id: S.String }, CompletedFocusItems)(({ id }) => Dom.focus(itemsSelector(id)).pipe(Effect.ignore, Effect.as(CompletedFocusItems())));
|
|
179
179
|
/** Scrolls the active listbox item into view after keyboard navigation. */
|
|
180
|
-
export const ScrollIntoView = Command.define('ScrollIntoView', CompletedScrollIntoView);
|
|
180
|
+
export const ScrollIntoView = Command.define('ScrollIntoView', { id: S.String, index: S.Number }, CompletedScrollIntoView)(({ id, index }) => Dom.scrollIntoView(itemSelector(id, index)).pipe(Effect.ignore, Effect.as(CompletedScrollIntoView())));
|
|
181
181
|
/** Programmatically clicks the active listbox item's DOM element. */
|
|
182
|
-
export const ClickItem = Command.define('ClickItem', CompletedClickItem);
|
|
182
|
+
export const ClickItem = Command.define('ClickItem', { id: S.String, index: S.Number }, CompletedClickItem)(({ id, index }) => Dom.clickElement(itemSelector(id, index)).pipe(Effect.ignore, Effect.as(CompletedClickItem())));
|
|
183
183
|
/** Waits for the typeahead search debounce period before clearing the query. */
|
|
184
|
-
export const DelayClearSearch = Command.define('DelayClearSearch', ClearedSearch);
|
|
185
|
-
/** Detects whether the listbox button moved or the leave animation ended
|
|
186
|
-
export const DetectMovementOrAnimationEnd = Command.define('DetectMovementOrAnimationEnd', GotAnimationMessage);
|
|
184
|
+
export const DelayClearSearch = Command.define('DelayClearSearch', { version: S.Number }, ClearedSearch)(({ version }) => Effect.sleep(SEARCH_DEBOUNCE_MILLISECONDS).pipe(Effect.as(ClearedSearch({ version }))));
|
|
185
|
+
/** Detects whether the listbox button moved or the leave animation ended. Whichever comes first; both outcomes signal the Animation submodel that leave is complete. */
|
|
186
|
+
export const DetectMovementOrAnimationEnd = Command.define('DetectMovementOrAnimationEnd', { id: S.String }, GotAnimationMessage)(({ id }) => Effect.raceFirst(Dom.detectElementMovement(buttonSelector(id)).pipe(Effect.as(GotAnimationMessage({ message: AnimationEndedAnimation() }))), Dom.waitForAnimationSettled(itemsSelector(id)).pipe(Effect.as(GotAnimationMessage({ message: AnimationEndedAnimation() })))));
|
|
187
187
|
export const makeUpdate = (handleSelectedItem) => {
|
|
188
188
|
const withUpdateReturn = M.withReturnType();
|
|
189
189
|
const delegateToAnimation = (model, animationMessage) => {
|
|
@@ -193,11 +193,7 @@ export const makeUpdate = (handleSelectedItem) => {
|
|
|
193
193
|
onNone: () => [],
|
|
194
194
|
onSome: M.type().pipe(M.tagsExhaustive({
|
|
195
195
|
StartedLeaveAnimating: () => [
|
|
196
|
-
DetectMovementOrAnimationEnd(
|
|
197
|
-
message: AnimationEndedAnimation(),
|
|
198
|
-
}))), Dom.waitForAnimationSettled(itemsSelector(model.id)).pipe(Effect.as(GotAnimationMessage({
|
|
199
|
-
message: AnimationEndedAnimation(),
|
|
200
|
-
}))))),
|
|
196
|
+
DetectMovementOrAnimationEnd({ id: model.id }),
|
|
201
197
|
],
|
|
202
198
|
TransitionedOut: () => [],
|
|
203
199
|
})),
|
|
@@ -226,15 +222,12 @@ export const makeUpdate = (handleSelectedItem) => {
|
|
|
226
222
|
return [closed, commands];
|
|
227
223
|
};
|
|
228
224
|
return (model, message) => {
|
|
229
|
-
const maybeLockScroll = OptionExt.when(model.isModal, LockScroll(
|
|
230
|
-
const maybeUnlockScroll = OptionExt.when(model.isModal, UnlockScroll(
|
|
231
|
-
const maybeInertOthers = OptionExt.when(model.isModal, InertOthers(
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
const maybeRestoreInert = OptionExt.when(model.isModal, RestoreInert(Dom.restoreInert(model.id).pipe(Effect.as(CompletedTeardownInert()))));
|
|
236
|
-
const focusButton = FocusButton(Dom.focus(buttonSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedFocusButton())));
|
|
237
|
-
const focusItems = FocusItems(Dom.focus(itemsSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedFocusItems())));
|
|
225
|
+
const maybeLockScroll = OptionExt.when(model.isModal, LockScroll());
|
|
226
|
+
const maybeUnlockScroll = OptionExt.when(model.isModal, UnlockScroll());
|
|
227
|
+
const maybeInertOthers = OptionExt.when(model.isModal, InertOthers({ id: model.id }));
|
|
228
|
+
const maybeRestoreInert = OptionExt.when(model.isModal, RestoreInert({ id: model.id }));
|
|
229
|
+
const focusButton = FocusButton({ id: model.id });
|
|
230
|
+
const focusItems = FocusItems({ id: model.id });
|
|
238
231
|
const openCommands = [
|
|
239
232
|
...Array.getSomes([maybeLockScroll, maybeInertOthers]),
|
|
240
233
|
focusItems,
|
|
@@ -271,9 +264,7 @@ export const makeUpdate = (handleSelectedItem) => {
|
|
|
271
264
|
activationTrigger: () => activationTrigger,
|
|
272
265
|
}),
|
|
273
266
|
activationTrigger === 'Keyboard'
|
|
274
|
-
? [
|
|
275
|
-
ScrollIntoView(Dom.scrollIntoView(itemSelector(model.id, index)).pipe(Effect.ignore, Effect.as(CompletedScrollIntoView()))),
|
|
276
|
-
]
|
|
267
|
+
? [ScrollIntoView({ id: model.id, index })]
|
|
277
268
|
: [],
|
|
278
269
|
],
|
|
279
270
|
MovedPointerOverItem: ({ index, screenX, screenY }) => {
|
|
@@ -304,9 +295,7 @@ export const makeUpdate = (handleSelectedItem) => {
|
|
|
304
295
|
}),
|
|
305
296
|
RequestedItemClick: ({ index }) => [
|
|
306
297
|
model,
|
|
307
|
-
[
|
|
308
|
-
ClickItem(Dom.clickElement(itemSelector(model.id, index)).pipe(Effect.ignore, Effect.as(CompletedClickItem()))),
|
|
309
|
-
],
|
|
298
|
+
[ClickItem({ id: model.id, index })],
|
|
310
299
|
],
|
|
311
300
|
Searched: ({ key, maybeTargetIndex }) => {
|
|
312
301
|
const nextSearchQuery = model.searchQuery + key;
|
|
@@ -317,9 +306,7 @@ export const makeUpdate = (handleSelectedItem) => {
|
|
|
317
306
|
searchVersion: () => nextSearchVersion,
|
|
318
307
|
maybeActiveItemIndex: () => Option.orElse(maybeTargetIndex, () => model.maybeActiveItemIndex),
|
|
319
308
|
}),
|
|
320
|
-
[
|
|
321
|
-
DelayClearSearch(Effect.sleep(SEARCH_DEBOUNCE_MILLISECONDS).pipe(Effect.as(ClearedSearch({ version: nextSearchVersion })))),
|
|
322
|
-
],
|
|
309
|
+
[DelayClearSearch({ version: nextSearchVersion })],
|
|
323
310
|
];
|
|
324
311
|
},
|
|
325
312
|
ClearedSearch: ({ version }) => {
|
|
@@ -77,6 +77,7 @@ export declare const update: (model: {
|
|
|
77
77
|
readonly maybeSelectedItem: Option.Option<string>;
|
|
78
78
|
}, readonly Readonly<{
|
|
79
79
|
name: string;
|
|
80
|
+
args?: Record<string, unknown>;
|
|
80
81
|
effect: import("effect/Effect").Effect<{
|
|
81
82
|
readonly _tag: "Opened";
|
|
82
83
|
readonly maybeActiveItemIndex: Option.Option<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../../src/ui/listbox/single.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEnD,OAAO,KAAK,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,KAAK,IAAI,EAAc,MAAM,qBAAqB,CAAA;AAE3D,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,cAAc,EACnB,MAAM,EACN,KAAK,OAAO,EACZ,MAAM,EACN,YAAY,EAIb,MAAM,aAAa,CAAA;AAIpB,mJAAmJ;AACnJ,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,6RAA6R;AAC7R,MAAM,MAAM,UAAU,GAAG,cAAc,GACrC,QAAQ,CAAC;IACP,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAC,CAAA;AAEJ,6HAA6H;AAC7H,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAIF,qIAAqI;AACrI,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../../src/ui/listbox/single.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEnD,OAAO,KAAK,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,KAAK,IAAI,EAAc,MAAM,qBAAqB,CAAA;AAE3D,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,cAAc,EACnB,MAAM,EACN,KAAK,OAAO,EACZ,MAAM,EACN,YAAY,EAIb,MAAM,aAAa,CAAA;AAIpB,mJAAmJ;AACnJ,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,6RAA6R;AAC7R,MAAM,MAAM,UAAU,GAAG,cAAc,GACrC,QAAQ,CAAC;IACP,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAC,CAAA;AAEJ,6HAA6H;AAC7H,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAIF,qIAAqI;AACrI,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAMjB,CAAA;AAEF;uFACuF;AACvF,eAAO,MAAM,IAAI,GACf,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACK,CAAA;AAEhE;wFACwF;AACxF,eAAO,MAAM,KAAK,GAChB,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAClC,CAAA;AAEzB;gGACgG;AAChG,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,MAAM,MAAM,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACpB,CAAA;AAIvC,uEAAuE;AACvE,MAAM,MAAM,UAAU,CAAC,aAAa,EAAE,IAAI,IAAI,cAAc,CAC1D,aAAa,EACb,IAAI,EACJ,KAAK,CACN,CAAA;AAED,2JAA2J;AAC3J,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAWf,CAAA;AAEF;mFACmF;AACnF,eAAO,MAAM,IAAI,GAAI,aAAa,EAAE,IAAI,EACtC,cAAc,IAAI,CAChB,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,EAC/B,OAAO,GAAG,iBAAiB,GAAG,gBAAgB,CAC/C,KACA,CAAC,CACF,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,cAAc,CAC7B,aAAa,EACb,IAAI,EACJ,KAAK,CACN,CAAC,iBAAiB,CAAC,KACjB,IAAI,CAoBR,CAAA"}
|
package/dist/ui/menu/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Schema as S } from 'effect';
|
|
1
|
+
import { Effect, 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
4
|
import * as Mount from '../../mount/index.js';
|
|
@@ -171,44 +171,62 @@ export type InitConfig = Readonly<{
|
|
|
171
171
|
export declare const init: (config: InitConfig) => Model;
|
|
172
172
|
type UpdateReturn = readonly [Model, ReadonlyArray<Command.Command<Message>>];
|
|
173
173
|
/** Prevents page scrolling while the menu is open. */
|
|
174
|
-
export declare const LockScroll: Command.
|
|
174
|
+
export declare const LockScroll: Command.CommandDefinitionNoArgs<"LockScroll", Effect.Effect<{
|
|
175
175
|
readonly _tag: "CompletedLockScroll";
|
|
176
|
-
}
|
|
176
|
+
}, never, never>>;
|
|
177
177
|
/** Re-enables page scrolling after the menu closes. */
|
|
178
|
-
export declare const UnlockScroll: Command.
|
|
178
|
+
export declare const UnlockScroll: Command.CommandDefinitionNoArgs<"UnlockScroll", Effect.Effect<{
|
|
179
179
|
readonly _tag: "CompletedUnlockScroll";
|
|
180
|
-
}
|
|
180
|
+
}, never, never>>;
|
|
181
181
|
/** Marks all elements outside the menu as inert for modal behavior. */
|
|
182
|
-
export declare const InertOthers: Command.
|
|
182
|
+
export declare const InertOthers: Command.CommandDefinitionWithArgs<"InertOthers", {
|
|
183
|
+
id: S.String;
|
|
184
|
+
}, Effect.Effect<{
|
|
183
185
|
readonly _tag: "CompletedSetupInert";
|
|
184
|
-
}
|
|
186
|
+
}, never, never>>;
|
|
185
187
|
/** Removes the inert attribute from elements outside the menu. */
|
|
186
|
-
export declare const RestoreInert: Command.
|
|
188
|
+
export declare const RestoreInert: Command.CommandDefinitionWithArgs<"RestoreInert", {
|
|
189
|
+
id: S.String;
|
|
190
|
+
}, Effect.Effect<{
|
|
187
191
|
readonly _tag: "CompletedTeardownInert";
|
|
188
|
-
}
|
|
192
|
+
}, never, never>>;
|
|
189
193
|
/** Moves focus to the menu items container after opening. */
|
|
190
|
-
export declare const FocusItems: Command.
|
|
194
|
+
export declare const FocusItems: Command.CommandDefinitionWithArgs<"FocusItems", {
|
|
195
|
+
id: S.String;
|
|
196
|
+
}, Effect.Effect<{
|
|
191
197
|
readonly _tag: "CompletedFocusItems";
|
|
192
|
-
}
|
|
198
|
+
}, never, never>>;
|
|
193
199
|
/** Moves focus back to the menu button after closing. */
|
|
194
|
-
export declare const FocusButton: Command.
|
|
200
|
+
export declare const FocusButton: Command.CommandDefinitionWithArgs<"FocusButton", {
|
|
201
|
+
id: S.String;
|
|
202
|
+
}, Effect.Effect<{
|
|
195
203
|
readonly _tag: "CompletedFocusButton";
|
|
196
|
-
}
|
|
204
|
+
}, never, never>>;
|
|
197
205
|
/** Scrolls the active menu item into view after keyboard navigation. */
|
|
198
|
-
export declare const ScrollIntoView: Command.
|
|
206
|
+
export declare const ScrollIntoView: Command.CommandDefinitionWithArgs<"ScrollIntoView", {
|
|
207
|
+
id: S.String;
|
|
208
|
+
index: S.Number;
|
|
209
|
+
}, Effect.Effect<{
|
|
199
210
|
readonly _tag: "CompletedScrollIntoView";
|
|
200
|
-
}
|
|
211
|
+
}, never, never>>;
|
|
201
212
|
/** Programmatically clicks the active menu item's DOM element. */
|
|
202
|
-
export declare const ClickItem: Command.
|
|
213
|
+
export declare const ClickItem: Command.CommandDefinitionWithArgs<"ClickItem", {
|
|
214
|
+
id: S.String;
|
|
215
|
+
index: S.Number;
|
|
216
|
+
}, Effect.Effect<{
|
|
203
217
|
readonly _tag: "CompletedClickItem";
|
|
204
|
-
}
|
|
218
|
+
}, never, never>>;
|
|
205
219
|
/** Waits for the typeahead search debounce period before clearing the query. */
|
|
206
|
-
export declare const DelayClearSearch: Command.
|
|
220
|
+
export declare const DelayClearSearch: Command.CommandDefinitionWithArgs<"DelayClearSearch", {
|
|
221
|
+
version: S.Number;
|
|
222
|
+
}, Effect.Effect<{
|
|
207
223
|
readonly _tag: "ClearedSearch";
|
|
208
224
|
readonly version: number;
|
|
209
|
-
}
|
|
210
|
-
/** Detects whether the menu button moved or the leave animation ended
|
|
211
|
-
export declare const DetectMovementOrAnimationEnd: Command.
|
|
225
|
+
}, never, never>>;
|
|
226
|
+
/** Detects whether the menu button moved or the leave animation ended. Whichever comes first; both outcomes signal the Animation submodel that leave is complete. */
|
|
227
|
+
export declare const DetectMovementOrAnimationEnd: Command.CommandDefinitionWithArgs<"DetectMovementOrAnimationEnd", {
|
|
228
|
+
id: S.String;
|
|
229
|
+
}, Effect.Effect<{
|
|
212
230
|
readonly _tag: "GotAnimationMessage";
|
|
213
231
|
readonly message: {
|
|
214
232
|
readonly _tag: "Showed";
|
|
@@ -219,7 +237,7 @@ export declare const DetectMovementOrAnimationEnd: Command.CommandDefinition<"De
|
|
|
219
237
|
} | {
|
|
220
238
|
readonly _tag: "EndedAnimation";
|
|
221
239
|
};
|
|
222
|
-
}
|
|
240
|
+
}, never, never>>;
|
|
223
241
|
/** Processes a menu message and returns the next model and commands. */
|
|
224
242
|
export declare const update: (model: Model, message: Message) => UpdateReturn;
|
|
225
243
|
/** The anchor-positioning Mount this Menu renders on its panel. Exposed so
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/menu/index.js
CHANGED
|
@@ -181,25 +181,25 @@ const itemsSelector = (id) => `#${id}-items`;
|
|
|
181
181
|
const itemSelector = (id, index) => `#${id}-item-${index}`;
|
|
182
182
|
const withUpdateReturn = M.withReturnType();
|
|
183
183
|
/** Prevents page scrolling while the menu is open. */
|
|
184
|
-
export const LockScroll = Command.define('LockScroll', CompletedLockScroll);
|
|
184
|
+
export const LockScroll = Command.define('LockScroll', CompletedLockScroll)(Dom.lockScroll.pipe(Effect.as(CompletedLockScroll())));
|
|
185
185
|
/** Re-enables page scrolling after the menu closes. */
|
|
186
|
-
export const UnlockScroll = Command.define('UnlockScroll', CompletedUnlockScroll);
|
|
186
|
+
export const UnlockScroll = Command.define('UnlockScroll', CompletedUnlockScroll)(Dom.unlockScroll.pipe(Effect.as(CompletedUnlockScroll())));
|
|
187
187
|
/** Marks all elements outside the menu as inert for modal behavior. */
|
|
188
|
-
export const InertOthers = Command.define('InertOthers', CompletedSetupInert);
|
|
188
|
+
export const InertOthers = Command.define('InertOthers', { id: S.String }, CompletedSetupInert)(({ id }) => Dom.inertOthers(id, [buttonSelector(id), itemsSelector(id)]).pipe(Effect.as(CompletedSetupInert())));
|
|
189
189
|
/** Removes the inert attribute from elements outside the menu. */
|
|
190
|
-
export const RestoreInert = Command.define('RestoreInert', CompletedTeardownInert);
|
|
190
|
+
export const RestoreInert = Command.define('RestoreInert', { id: S.String }, CompletedTeardownInert)(({ id }) => Dom.restoreInert(id).pipe(Effect.as(CompletedTeardownInert())));
|
|
191
191
|
/** Moves focus to the menu items container after opening. */
|
|
192
|
-
export const FocusItems = Command.define('FocusItems', CompletedFocusItems);
|
|
192
|
+
export const FocusItems = Command.define('FocusItems', { id: S.String }, CompletedFocusItems)(({ id }) => Dom.focus(itemsSelector(id)).pipe(Effect.ignore, Effect.as(CompletedFocusItems())));
|
|
193
193
|
/** Moves focus back to the menu button after closing. */
|
|
194
|
-
export const FocusButton = Command.define('FocusButton', CompletedFocusButton);
|
|
194
|
+
export const FocusButton = Command.define('FocusButton', { id: S.String }, CompletedFocusButton)(({ id }) => Dom.focus(buttonSelector(id)).pipe(Effect.ignore, Effect.as(CompletedFocusButton())));
|
|
195
195
|
/** Scrolls the active menu item into view after keyboard navigation. */
|
|
196
|
-
export const ScrollIntoView = Command.define('ScrollIntoView', CompletedScrollIntoView);
|
|
196
|
+
export const ScrollIntoView = Command.define('ScrollIntoView', { id: S.String, index: S.Number }, CompletedScrollIntoView)(({ id, index }) => Dom.scrollIntoView(itemSelector(id, index)).pipe(Effect.ignore, Effect.as(CompletedScrollIntoView())));
|
|
197
197
|
/** Programmatically clicks the active menu item's DOM element. */
|
|
198
|
-
export const ClickItem = Command.define('ClickItem', CompletedClickItem);
|
|
198
|
+
export const ClickItem = Command.define('ClickItem', { id: S.String, index: S.Number }, CompletedClickItem)(({ id, index }) => Dom.clickElement(itemSelector(id, index)).pipe(Effect.ignore, Effect.as(CompletedClickItem())));
|
|
199
199
|
/** Waits for the typeahead search debounce period before clearing the query. */
|
|
200
|
-
export const DelayClearSearch = Command.define('DelayClearSearch', ClearedSearch);
|
|
201
|
-
/** Detects whether the menu button moved or the leave animation ended
|
|
202
|
-
export const DetectMovementOrAnimationEnd = Command.define('DetectMovementOrAnimationEnd', GotAnimationMessage);
|
|
200
|
+
export const DelayClearSearch = Command.define('DelayClearSearch', { version: S.Number }, ClearedSearch)(({ version }) => Effect.sleep(SEARCH_DEBOUNCE_MILLISECONDS).pipe(Effect.as(ClearedSearch({ version }))));
|
|
201
|
+
/** Detects whether the menu button moved or the leave animation ended. Whichever comes first; both outcomes signal the Animation submodel that leave is complete. */
|
|
202
|
+
export const DetectMovementOrAnimationEnd = Command.define('DetectMovementOrAnimationEnd', { id: S.String }, GotAnimationMessage)(({ id }) => Effect.raceFirst(Dom.detectElementMovement(buttonSelector(id)).pipe(Effect.as(GotAnimationMessage({ message: AnimationEndedAnimation() }))), Dom.waitForAnimationSettled(itemsSelector(id)).pipe(Effect.as(GotAnimationMessage({ message: AnimationEndedAnimation() })))));
|
|
203
203
|
const delegateToAnimation = (model, animationMessage) => {
|
|
204
204
|
const [nextAnimation, animationCommands, maybeOutMessage] = animationUpdate(model.animation, animationMessage);
|
|
205
205
|
const mappedCommands = animationCommands.map(Command.mapEffect(Effect.map(message => GotAnimationMessage({ message }))));
|
|
@@ -207,11 +207,7 @@ const delegateToAnimation = (model, animationMessage) => {
|
|
|
207
207
|
onNone: () => [],
|
|
208
208
|
onSome: M.type().pipe(M.tagsExhaustive({
|
|
209
209
|
StartedLeaveAnimating: () => [
|
|
210
|
-
DetectMovementOrAnimationEnd(
|
|
211
|
-
message: AnimationEndedAnimation(),
|
|
212
|
-
}))), Dom.waitForAnimationSettled(itemsSelector(model.id)).pipe(Effect.as(GotAnimationMessage({
|
|
213
|
-
message: AnimationEndedAnimation(),
|
|
214
|
-
}))))),
|
|
210
|
+
DetectMovementOrAnimationEnd({ id: model.id }),
|
|
215
211
|
],
|
|
216
212
|
TransitionedOut: () => [],
|
|
217
213
|
})),
|
|
@@ -223,21 +219,16 @@ const delegateToAnimation = (model, animationMessage) => {
|
|
|
223
219
|
};
|
|
224
220
|
/** Processes a menu message and returns the next model and commands. */
|
|
225
221
|
export const update = (model, message) => {
|
|
226
|
-
const maybeLockScroll = OptionExt.when(model.isModal, LockScroll(
|
|
227
|
-
const maybeUnlockScroll = OptionExt.when(model.isModal, UnlockScroll(
|
|
228
|
-
const maybeInertOthers = OptionExt.when(model.isModal, InertOthers(
|
|
229
|
-
|
|
230
|
-
itemsSelector(model.id),
|
|
231
|
-
]).pipe(Effect.as(CompletedSetupInert()))));
|
|
232
|
-
const maybeRestoreInert = OptionExt.when(model.isModal, RestoreInert(Dom.restoreInert(model.id).pipe(Effect.as(CompletedTeardownInert()))));
|
|
233
|
-
const focusButton = FocusButton(Dom.focus(buttonSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedFocusButton())));
|
|
234
|
-
const focusItems = FocusItems(Dom.focus(itemsSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedFocusItems())));
|
|
222
|
+
const maybeLockScroll = OptionExt.when(model.isModal, LockScroll());
|
|
223
|
+
const maybeUnlockScroll = OptionExt.when(model.isModal, UnlockScroll());
|
|
224
|
+
const maybeInertOthers = OptionExt.when(model.isModal, InertOthers({ id: model.id }));
|
|
225
|
+
const maybeRestoreInert = OptionExt.when(model.isModal, RestoreInert({ id: model.id }));
|
|
235
226
|
const openCommands = [
|
|
236
227
|
...Array.getSomes([maybeLockScroll, maybeInertOthers]),
|
|
237
|
-
|
|
228
|
+
FocusItems({ id: model.id }),
|
|
238
229
|
];
|
|
239
230
|
const closeWithFocusCommands = [
|
|
240
|
-
|
|
231
|
+
FocusButton({ id: model.id }),
|
|
241
232
|
...Array.getSomes([maybeUnlockScroll, maybeRestoreInert]),
|
|
242
233
|
];
|
|
243
234
|
const closeWithoutFocusCommands = Array.getSomes([
|
|
@@ -286,9 +277,7 @@ export const update = (model, message) => {
|
|
|
286
277
|
activationTrigger: () => activationTrigger,
|
|
287
278
|
}),
|
|
288
279
|
activationTrigger === 'Keyboard'
|
|
289
|
-
? [
|
|
290
|
-
ScrollIntoView(Dom.scrollIntoView(itemSelector(model.id, index)).pipe(Effect.ignore, Effect.as(CompletedScrollIntoView()))),
|
|
291
|
-
]
|
|
280
|
+
? [ScrollIntoView({ id: model.id, index })]
|
|
292
281
|
: [],
|
|
293
282
|
],
|
|
294
283
|
MovedPointerOverItem: ({ index, screenX, screenY }) => {
|
|
@@ -311,9 +300,7 @@ export const update = (model, message) => {
|
|
|
311
300
|
SelectedItem: () => closeMenu(model, closeWithFocusCommands),
|
|
312
301
|
RequestedItemClick: ({ index }) => [
|
|
313
302
|
model,
|
|
314
|
-
[
|
|
315
|
-
ClickItem(Dom.clickElement(itemSelector(model.id, index)).pipe(Effect.ignore, Effect.as(CompletedClickItem()))),
|
|
316
|
-
],
|
|
303
|
+
[ClickItem({ id: model.id, index })],
|
|
317
304
|
],
|
|
318
305
|
Searched: ({ key, maybeTargetIndex }) => {
|
|
319
306
|
const nextSearchQuery = model.searchQuery + key;
|
|
@@ -324,9 +311,7 @@ export const update = (model, message) => {
|
|
|
324
311
|
searchVersion: () => nextSearchVersion,
|
|
325
312
|
maybeActiveItemIndex: () => Option.orElse(maybeTargetIndex, () => model.maybeActiveItemIndex),
|
|
326
313
|
}),
|
|
327
|
-
[
|
|
328
|
-
DelayClearSearch(Effect.sleep(SEARCH_DEBOUNCE_MILLISECONDS).pipe(Effect.as(ClearedSearch({ version: nextSearchVersion })))),
|
|
329
|
-
],
|
|
314
|
+
[DelayClearSearch({ version: nextSearchVersion })],
|
|
330
315
|
];
|
|
331
316
|
},
|
|
332
317
|
ClearedSearch: ({ version }) => {
|
|
@@ -378,7 +363,10 @@ export const update = (model, message) => {
|
|
|
378
363
|
return [
|
|
379
364
|
model,
|
|
380
365
|
[
|
|
381
|
-
ClickItem(
|
|
366
|
+
ClickItem({
|
|
367
|
+
id: model.id,
|
|
368
|
+
index: model.maybeActiveItemIndex.value,
|
|
369
|
+
}),
|
|
382
370
|
],
|
|
383
371
|
];
|
|
384
372
|
},
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Schema as S } from 'effect';
|
|
1
|
+
import { Effect, 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
4
|
import * as Mount from '../../mount/index.js';
|
|
@@ -89,31 +89,41 @@ export type InitConfig = Readonly<{
|
|
|
89
89
|
export declare const init: (config: InitConfig) => Model;
|
|
90
90
|
type UpdateReturn = readonly [Model, ReadonlyArray<Command.Command<Message>>];
|
|
91
91
|
/** Prevents page scrolling while the popover is open in modal mode. */
|
|
92
|
-
export declare const LockScroll: Command.
|
|
92
|
+
export declare const LockScroll: Command.CommandDefinitionNoArgs<"LockScroll", Effect.Effect<{
|
|
93
93
|
readonly _tag: "CompletedLockScroll";
|
|
94
|
-
}
|
|
94
|
+
}, never, never>>;
|
|
95
95
|
/** Re-enables page scrolling after the popover closes. */
|
|
96
|
-
export declare const UnlockScroll: Command.
|
|
96
|
+
export declare const UnlockScroll: Command.CommandDefinitionNoArgs<"UnlockScroll", Effect.Effect<{
|
|
97
97
|
readonly _tag: "CompletedUnlockScroll";
|
|
98
|
-
}
|
|
98
|
+
}, never, never>>;
|
|
99
99
|
/** Marks all elements outside the popover as inert for modal behavior. */
|
|
100
|
-
export declare const InertOthers: Command.
|
|
100
|
+
export declare const InertOthers: Command.CommandDefinitionWithArgs<"InertOthers", {
|
|
101
|
+
id: S.String;
|
|
102
|
+
}, Effect.Effect<{
|
|
101
103
|
readonly _tag: "CompletedSetupInert";
|
|
102
|
-
}
|
|
104
|
+
}, never, never>>;
|
|
103
105
|
/** Removes the inert attribute from elements outside the popover. */
|
|
104
|
-
export declare const RestoreInert: Command.
|
|
106
|
+
export declare const RestoreInert: Command.CommandDefinitionWithArgs<"RestoreInert", {
|
|
107
|
+
id: S.String;
|
|
108
|
+
}, Effect.Effect<{
|
|
105
109
|
readonly _tag: "CompletedTeardownInert";
|
|
106
|
-
}
|
|
110
|
+
}, never, never>>;
|
|
107
111
|
/** Moves focus to the popover panel after opening. */
|
|
108
|
-
export declare const FocusPanel: Command.
|
|
112
|
+
export declare const FocusPanel: Command.CommandDefinitionWithArgs<"FocusPanel", {
|
|
113
|
+
id: S.String;
|
|
114
|
+
}, Effect.Effect<{
|
|
109
115
|
readonly _tag: "CompletedFocusPanel";
|
|
110
|
-
}
|
|
116
|
+
}, never, never>>;
|
|
111
117
|
/** Moves focus back to the popover button after closing. */
|
|
112
|
-
export declare const FocusButton: Command.
|
|
118
|
+
export declare const FocusButton: Command.CommandDefinitionWithArgs<"FocusButton", {
|
|
119
|
+
id: S.String;
|
|
120
|
+
}, Effect.Effect<{
|
|
113
121
|
readonly _tag: "CompletedFocusButton";
|
|
114
|
-
}
|
|
115
|
-
/** Detects whether the popover button moved or the leave animation ended
|
|
116
|
-
export declare const DetectMovementOrAnimationEnd: Command.
|
|
122
|
+
}, never, never>>;
|
|
123
|
+
/** Detects whether the popover button moved or the leave animation ended. Whichever comes first; both outcomes signal the Animation submodel that leave is complete. */
|
|
124
|
+
export declare const DetectMovementOrAnimationEnd: Command.CommandDefinitionWithArgs<"DetectMovementOrAnimationEnd", {
|
|
125
|
+
id: S.String;
|
|
126
|
+
}, Effect.Effect<{
|
|
117
127
|
readonly _tag: "GotAnimationMessage";
|
|
118
128
|
readonly message: {
|
|
119
129
|
readonly _tag: "Showed";
|
|
@@ -124,7 +134,7 @@ export declare const DetectMovementOrAnimationEnd: Command.CommandDefinition<"De
|
|
|
124
134
|
} | {
|
|
125
135
|
readonly _tag: "EndedAnimation";
|
|
126
136
|
};
|
|
127
|
-
}
|
|
137
|
+
}, never, never>>;
|
|
128
138
|
/** Processes a popover message and returns the next model and commands. */
|
|
129
139
|
export declare const update: (model: Model, message: Message) => UpdateReturn;
|
|
130
140
|
/** The anchor-positioning Mount this Popover renders on its panel. Exposed so
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/popover/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/popover/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/popover/index.js
CHANGED
|
@@ -98,19 +98,19 @@ const buttonSelector = (id) => `#${id}-button`;
|
|
|
98
98
|
const panelSelector = (id) => `#${id}-panel`;
|
|
99
99
|
const withUpdateReturn = M.withReturnType();
|
|
100
100
|
/** Prevents page scrolling while the popover is open in modal mode. */
|
|
101
|
-
export const LockScroll = Command.define('LockScroll', CompletedLockScroll);
|
|
101
|
+
export const LockScroll = Command.define('LockScroll', CompletedLockScroll)(Dom.lockScroll.pipe(Effect.as(CompletedLockScroll())));
|
|
102
102
|
/** Re-enables page scrolling after the popover closes. */
|
|
103
|
-
export const UnlockScroll = Command.define('UnlockScroll', CompletedUnlockScroll);
|
|
103
|
+
export const UnlockScroll = Command.define('UnlockScroll', CompletedUnlockScroll)(Dom.unlockScroll.pipe(Effect.as(CompletedUnlockScroll())));
|
|
104
104
|
/** Marks all elements outside the popover as inert for modal behavior. */
|
|
105
|
-
export const InertOthers = Command.define('InertOthers', CompletedSetupInert);
|
|
105
|
+
export const InertOthers = Command.define('InertOthers', { id: S.String }, CompletedSetupInert)(({ id }) => Dom.inertOthers(id, [buttonSelector(id), panelSelector(id)]).pipe(Effect.as(CompletedSetupInert())));
|
|
106
106
|
/** Removes the inert attribute from elements outside the popover. */
|
|
107
|
-
export const RestoreInert = Command.define('RestoreInert', CompletedTeardownInert);
|
|
107
|
+
export const RestoreInert = Command.define('RestoreInert', { id: S.String }, CompletedTeardownInert)(({ id }) => Dom.restoreInert(id).pipe(Effect.as(CompletedTeardownInert())));
|
|
108
108
|
/** Moves focus to the popover panel after opening. */
|
|
109
|
-
export const FocusPanel = Command.define('FocusPanel', CompletedFocusPanel);
|
|
109
|
+
export const FocusPanel = Command.define('FocusPanel', { id: S.String }, CompletedFocusPanel)(({ id }) => Dom.focus(panelSelector(id)).pipe(Effect.ignore, Effect.as(CompletedFocusPanel())));
|
|
110
110
|
/** Moves focus back to the popover button after closing. */
|
|
111
|
-
export const FocusButton = Command.define('FocusButton', CompletedFocusButton);
|
|
112
|
-
/** Detects whether the popover button moved or the leave animation ended
|
|
113
|
-
export const DetectMovementOrAnimationEnd = Command.define('DetectMovementOrAnimationEnd', GotAnimationMessage);
|
|
111
|
+
export const FocusButton = Command.define('FocusButton', { id: S.String }, CompletedFocusButton)(({ id }) => Dom.focus(buttonSelector(id)).pipe(Effect.ignore, Effect.as(CompletedFocusButton())));
|
|
112
|
+
/** Detects whether the popover button moved or the leave animation ended. Whichever comes first; both outcomes signal the Animation submodel that leave is complete. */
|
|
113
|
+
export const DetectMovementOrAnimationEnd = Command.define('DetectMovementOrAnimationEnd', { id: S.String }, GotAnimationMessage)(({ id }) => Effect.raceFirst(Dom.detectElementMovement(buttonSelector(id)).pipe(Effect.as(GotAnimationMessage({ message: AnimationEndedAnimation() }))), Dom.waitForAnimationSettled(panelSelector(id)).pipe(Effect.as(GotAnimationMessage({ message: AnimationEndedAnimation() })))));
|
|
114
114
|
const delegateToAnimation = (model, animationMessage) => {
|
|
115
115
|
const [nextAnimation, animationCommands, maybeOutMessage] = animationUpdate(model.animation, animationMessage);
|
|
116
116
|
const mappedCommands = animationCommands.map(Command.mapEffect(Effect.map(message => GotAnimationMessage({ message }))));
|
|
@@ -118,11 +118,7 @@ const delegateToAnimation = (model, animationMessage) => {
|
|
|
118
118
|
onNone: () => [],
|
|
119
119
|
onSome: M.type().pipe(M.tagsExhaustive({
|
|
120
120
|
StartedLeaveAnimating: () => [
|
|
121
|
-
DetectMovementOrAnimationEnd(
|
|
122
|
-
message: AnimationEndedAnimation(),
|
|
123
|
-
}))), Dom.waitForAnimationSettled(panelSelector(model.id)).pipe(Effect.as(GotAnimationMessage({
|
|
124
|
-
message: AnimationEndedAnimation(),
|
|
125
|
-
}))))),
|
|
121
|
+
DetectMovementOrAnimationEnd({ id: model.id }),
|
|
126
122
|
],
|
|
127
123
|
TransitionedOut: () => [],
|
|
128
124
|
})),
|
|
@@ -134,14 +130,11 @@ const delegateToAnimation = (model, animationMessage) => {
|
|
|
134
130
|
};
|
|
135
131
|
/** Processes a popover message and returns the next model and commands. */
|
|
136
132
|
export const update = (model, message) => {
|
|
137
|
-
const maybeLockScroll = OptionExt.when(model.isModal, LockScroll(
|
|
138
|
-
const maybeUnlockScroll = OptionExt.when(model.isModal, UnlockScroll(
|
|
139
|
-
const maybeInertOthers = OptionExt.when(model.isModal, InertOthers(
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
]).pipe(Effect.as(CompletedSetupInert()))));
|
|
143
|
-
const maybeRestoreInert = OptionExt.when(model.isModal, RestoreInert(Dom.restoreInert(model.id).pipe(Effect.as(CompletedTeardownInert()))));
|
|
144
|
-
const focusButton = FocusButton(Dom.focus(buttonSelector(model.id)).pipe(Effect.ignore, Effect.as(CompletedFocusButton())));
|
|
133
|
+
const maybeLockScroll = OptionExt.when(model.isModal, LockScroll());
|
|
134
|
+
const maybeUnlockScroll = OptionExt.when(model.isModal, UnlockScroll());
|
|
135
|
+
const maybeInertOthers = OptionExt.when(model.isModal, InertOthers({ id: model.id }));
|
|
136
|
+
const maybeRestoreInert = OptionExt.when(model.isModal, RestoreInert({ id: model.id }));
|
|
137
|
+
const focusButton = FocusButton({ id: model.id });
|
|
145
138
|
const openCommands = Array.getSomes([maybeLockScroll, maybeInertOthers]);
|
|
146
139
|
const closeWithFocusCommands = [
|
|
147
140
|
focusButton,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Schema as S } from 'effect';
|
|
1
|
+
import { Effect, 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
4
|
/** Controls the radio group layout direction and which arrow keys navigate between options. */
|
|
@@ -35,9 +35,12 @@ export type InitConfig = Readonly<{
|
|
|
35
35
|
/** Creates an initial radio group model from a config. Defaults to no selection and vertical orientation. */
|
|
36
36
|
export declare const init: (config: InitConfig) => Model;
|
|
37
37
|
/** Moves focus to the radio option at the given index. */
|
|
38
|
-
export declare const FocusOption: Command.
|
|
38
|
+
export declare const FocusOption: Command.CommandDefinitionWithArgs<"FocusOption", {
|
|
39
|
+
id: S.String;
|
|
40
|
+
index: S.Number;
|
|
41
|
+
}, Effect.Effect<{
|
|
39
42
|
readonly _tag: "CompletedFocusOption";
|
|
40
|
-
}
|
|
43
|
+
}, never, never>>;
|
|
41
44
|
/** Processes a radio group message and returns the next model and commands. */
|
|
42
45
|
export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<Command.Command<Message>>];
|
|
43
46
|
/** Programmatically selects a value in the radio group, updating the model and returning
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/radioGroup/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/radioGroup/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,18 +33,13 @@ export const init = (config) => ({
|
|
|
33
33
|
// UPDATE
|
|
34
34
|
const optionId = (id, index) => `${id}-option-${index}`;
|
|
35
35
|
/** Moves focus to the radio option at the given index. */
|
|
36
|
-
export const FocusOption = Command.define('FocusOption', CompletedFocusOption);
|
|
36
|
+
export const FocusOption = Command.define('FocusOption', { id: S.String, index: S.Number }, CompletedFocusOption)(({ id, index }) => Dom.focus(`#${optionId(id, index)}`).pipe(Effect.ignore, Effect.as(CompletedFocusOption())));
|
|
37
37
|
/** Processes a radio group message and returns the next model and commands. */
|
|
38
38
|
export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
|
|
39
|
-
SelectedOption: ({ value, index }) =>
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
[
|
|
44
|
-
FocusOption(Dom.focus(selector).pipe(Effect.ignore, Effect.as(CompletedFocusOption()))),
|
|
45
|
-
],
|
|
46
|
-
];
|
|
47
|
-
},
|
|
39
|
+
SelectedOption: ({ value, index }) => [
|
|
40
|
+
evo(model, { selectedValue: () => Option.some(value) }),
|
|
41
|
+
[FocusOption({ id: model.id, index })],
|
|
42
|
+
],
|
|
48
43
|
CompletedFocusOption: () => [model, []],
|
|
49
44
|
}));
|
|
50
45
|
/** Programmatically selects a value in the radio group, updating the model and returning
|