foldkit 0.18.0 → 0.20.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.
Files changed (85) hide show
  1. package/README.md +14 -14
  2. package/dist/command/index.d.ts +4 -0
  3. package/dist/command/index.d.ts.map +1 -0
  4. package/dist/command/index.js +1 -0
  5. package/dist/command/public.d.ts +2 -0
  6. package/dist/command/public.d.ts.map +1 -0
  7. package/dist/command/public.js +1 -0
  8. package/dist/effectExtensions/optionExtensions.d.ts +4 -0
  9. package/dist/effectExtensions/optionExtensions.d.ts.map +1 -1
  10. package/dist/effectExtensions/optionExtensions.js +2 -1
  11. package/dist/fieldValidation/index.d.ts.map +1 -1
  12. package/dist/fieldValidation/index.js +4 -4
  13. package/dist/html/index.d.ts +45 -3
  14. package/dist/html/index.d.ts.map +1 -1
  15. package/dist/html/index.js +53 -7
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +1 -0
  19. package/dist/message/index.d.ts +2 -0
  20. package/dist/message/index.d.ts.map +1 -0
  21. package/dist/message/index.js +1 -0
  22. package/dist/message/public.d.ts +2 -0
  23. package/dist/message/public.d.ts.map +1 -0
  24. package/dist/message/public.js +1 -0
  25. package/dist/route/index.d.ts +1 -0
  26. package/dist/route/index.d.ts.map +1 -1
  27. package/dist/route/index.js +1 -0
  28. package/dist/route/parser.js +17 -17
  29. package/dist/route/public.d.ts +1 -1
  30. package/dist/route/public.d.ts.map +1 -1
  31. package/dist/route/public.js +1 -1
  32. package/dist/runtime/public.d.ts +1 -1
  33. package/dist/runtime/public.d.ts.map +1 -1
  34. package/dist/runtime/runtime.d.ts +2 -3
  35. package/dist/runtime/runtime.d.ts.map +1 -1
  36. package/dist/runtime/runtime.js +9 -9
  37. package/dist/schema/index.d.ts +36 -8
  38. package/dist/schema/index.d.ts.map +1 -1
  39. package/dist/schema/index.js +6 -0
  40. package/dist/task/dom.d.ts +58 -0
  41. package/dist/task/dom.d.ts.map +1 -0
  42. package/dist/task/dom.js +112 -0
  43. package/dist/task/error.d.ts +18 -0
  44. package/dist/task/error.d.ts.map +1 -0
  45. package/dist/task/error.js +7 -0
  46. package/dist/task/index.d.ts +7 -108
  47. package/dist/task/index.d.ts.map +1 -1
  48. package/dist/task/index.js +7 -168
  49. package/dist/task/inert.d.ts +26 -0
  50. package/dist/task/inert.d.ts.map +1 -0
  51. package/dist/task/inert.js +87 -0
  52. package/dist/task/public.d.ts +1 -1
  53. package/dist/task/public.d.ts.map +1 -1
  54. package/dist/task/public.js +1 -1
  55. package/dist/task/random.d.ts +11 -0
  56. package/dist/task/random.d.ts.map +1 -0
  57. package/dist/task/random.js +10 -0
  58. package/dist/task/scrollLock.d.ts +24 -0
  59. package/dist/task/scrollLock.d.ts.map +1 -0
  60. package/dist/task/scrollLock.js +46 -0
  61. package/dist/task/time.d.ts +43 -0
  62. package/dist/task/time.d.ts.map +1 -0
  63. package/dist/task/time.js +53 -0
  64. package/dist/task/timing.d.ts +35 -0
  65. package/dist/task/timing.d.ts.map +1 -0
  66. package/dist/task/timing.js +51 -0
  67. package/dist/ui/dialog/index.d.ts +1 -1
  68. package/dist/ui/dialog/index.d.ts.map +1 -1
  69. package/dist/ui/dialog/index.js +7 -7
  70. package/dist/ui/disclosure/index.d.ts +1 -1
  71. package/dist/ui/disclosure/index.d.ts.map +1 -1
  72. package/dist/ui/disclosure/index.js +7 -7
  73. package/dist/ui/keyboard.d.ts.map +1 -1
  74. package/dist/ui/keyboard.js +1 -1
  75. package/dist/ui/menu/index.d.ts +71 -18
  76. package/dist/ui/menu/index.d.ts.map +1 -1
  77. package/dist/ui/menu/index.js +325 -113
  78. package/dist/ui/menu/public.d.ts +2 -2
  79. package/dist/ui/menu/public.d.ts.map +1 -1
  80. package/dist/ui/menu/public.js +1 -1
  81. package/dist/ui/tabs/index.d.ts +4 -5
  82. package/dist/ui/tabs/index.d.ts.map +1 -1
  83. package/dist/ui/tabs/index.js +12 -14
  84. package/dist/url/index.js +4 -4
  85. package/package.json +13 -1
@@ -0,0 +1,35 @@
1
+ import { Duration, Effect } from 'effect';
2
+ /**
3
+ * Waits for the given duration before completing.
4
+ * Useful for debouncing, such as clearing a typeahead search query.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * Task.delay('1 second').pipe(Effect.as(TimedOut()))
9
+ * ```
10
+ */
11
+ export declare const delay: (duration: Duration.DurationInput) => Effect.Effect<void>;
12
+ /**
13
+ * Completes after two animation frames, ensuring the browser has painted
14
+ * the current state before proceeding. Used for CSS transition orchestration —
15
+ * the double-rAF guarantees the "from" state is visible before transitioning
16
+ * to the "to" state.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * Task.nextFrame.pipe(Effect.as(TransitionFrameAdvanced()))
21
+ * ```
22
+ */
23
+ export declare const nextFrame: Effect.Effect<void>;
24
+ /**
25
+ * Waits for all CSS transitions on the element matching the selector to complete.
26
+ * Uses the Web Animations API for reliable detection. Falls back to completing
27
+ * immediately if the element is missing or has no active transitions.
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * Task.waitForTransitions('#menu-items').pipe(Effect.as(TransitionEnded()))
32
+ * ```
33
+ */
34
+ export declare const waitForTransitions: (selector: string) => Effect.Effect<void>;
35
+ //# sourceMappingURL=timing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../src/task/timing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEzC;;;;;;;;GAQG;AACH,eAAO,MAAM,KAAK,GAAI,UAAU,QAAQ,CAAC,aAAa,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CACnD,CAAA;AAExB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAMxC,CAAA;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAgBpE,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { Effect } from 'effect';
2
+ /**
3
+ * Waits for the given duration before completing.
4
+ * Useful for debouncing, such as clearing a typeahead search query.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * Task.delay('1 second').pipe(Effect.as(TimedOut()))
9
+ * ```
10
+ */
11
+ export const delay = (duration) => Effect.sleep(duration);
12
+ /**
13
+ * Completes after two animation frames, ensuring the browser has painted
14
+ * the current state before proceeding. Used for CSS transition orchestration —
15
+ * the double-rAF guarantees the "from" state is visible before transitioning
16
+ * to the "to" state.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * Task.nextFrame.pipe(Effect.as(TransitionFrameAdvanced()))
21
+ * ```
22
+ */
23
+ export const nextFrame = Effect.async(resume => {
24
+ requestAnimationFrame(() => {
25
+ requestAnimationFrame(() => {
26
+ resume(Effect.void);
27
+ });
28
+ });
29
+ });
30
+ /**
31
+ * Waits for all CSS transitions on the element matching the selector to complete.
32
+ * Uses the Web Animations API for reliable detection. Falls back to completing
33
+ * immediately if the element is missing or has no active transitions.
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * Task.waitForTransitions('#menu-items').pipe(Effect.as(TransitionEnded()))
38
+ * ```
39
+ */
40
+ export const waitForTransitions = (selector) => Effect.async(resume => {
41
+ requestAnimationFrame(async () => {
42
+ const element = document.querySelector(selector);
43
+ const cssTransitions = element instanceof HTMLElement
44
+ ? element
45
+ .getAnimations()
46
+ .filter(animation => 'transitionProperty' in animation)
47
+ : [];
48
+ await Promise.allSettled(cssTransitions.map(({ finished }) => finished));
49
+ resume(Effect.void);
50
+ });
51
+ });
@@ -1,6 +1,6 @@
1
1
  import { Schema as S } from 'effect';
2
+ import type { Command } from '../../command';
2
3
  import type { Html } from '../../html';
3
- import type { Command } from '../../runtime/runtime';
4
4
  /** Schema for the dialog component's state, tracking its unique ID and open/closed status. */
5
5
  export declare const Model: S.Struct<{
6
6
  id: typeof S.String;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/dialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAGxD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAOpD,8FAA8F;AAC9F,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,wEAAwE;AACxE,eAAO,MAAM,MAAM,2DAAe,CAAA;AAClC,wHAAwH;AACxH,eAAO,MAAM,MAAM,2DAAe,CAAA;AAClC,oHAAoH;AACpH,eAAO,MAAM,IAAI,yDAAa,CAAA;AAE9B,8DAA8D;AAC9D,eAAO,MAAM,OAAO,0LAAgC,CAAA;AAEpD,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AACvC,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AACvC,MAAM,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,CAAA;AAEnC,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,6DAA6D;AAC7D,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAC,CAAA;AAEF,yEAAyE;AACzE,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAMF,0EAA0E;AAC1E,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CA4BvC,CAAA;AAIH,iGAAiG;AACjG,eAAO,MAAM,OAAO,GAAI,OAAO,KAAK,KAAG,MAA6B,CAAA;AAEpE,wGAAwG;AACxG,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,KAAG,MAAmC,CAAA;AAEhF,wDAAwD;AACxD,MAAM,MAAM,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC;IACzC,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAA;IAC9C,YAAY,EAAE,IAAI,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAC,CAAA;AAEF,sGAAsG;AACtG,eAAO,MAAM,IAAI,GAAI,OAAO,EAAE,QAAQ,UAAU,CAAC,OAAO,CAAC,KAAG,IA6C3D,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/dialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAOtC,8FAA8F;AAC9F,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,wEAAwE;AACxE,eAAO,MAAM,MAAM,2DAAc,CAAA;AACjC,wHAAwH;AACxH,eAAO,MAAM,MAAM,2DAAc,CAAA;AACjC,oHAAoH;AACpH,eAAO,MAAM,IAAI,yDAAY,CAAA;AAE7B,8DAA8D;AAC9D,eAAO,MAAM,OAAO,0LAAgC,CAAA;AAEpD,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AACvC,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AACvC,MAAM,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,CAAA;AAEnC,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,6DAA6D;AAC7D,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAC,CAAA;AAEF,yEAAyE;AACzE,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAMF,0EAA0E;AAC1E,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAkCvC,CAAA;AAIH,iGAAiG;AACjG,eAAO,MAAM,OAAO,GAAI,OAAO,KAAK,KAAG,MAA6B,CAAA;AAEpE,wGAAwG;AACxG,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,KAAG,MAAmC,CAAA;AAEhF,wDAAwD;AACxD,MAAM,MAAM,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC;IACzC,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAA;IAC9C,YAAY,EAAE,IAAI,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAC,CAAA;AAEF,sGAAsG;AACtG,eAAO,MAAM,IAAI,GAAI,OAAO,EAAE,QAAQ,UAAU,CAAC,OAAO,CAAC,KAAG,IA6C3D,CAAA"}
@@ -1,6 +1,6 @@
1
- import { Match as M, Option, Schema as S } from 'effect';
1
+ import { Effect, Match as M, Option, Schema as S } from 'effect';
2
2
  import { html } from '../../html';
3
- import { ts } from '../../schema';
3
+ import { m } from '../../message';
4
4
  import { evo } from '../../struct';
5
5
  import * as Task from '../../task';
6
6
  // MODEL
@@ -11,11 +11,11 @@ export const Model = S.Struct({
11
11
  });
12
12
  // MESSAGE
13
13
  /** Sent when the dialog should open. Triggers the showModal command. */
14
- export const Opened = ts('Opened');
14
+ export const Opened = m('Opened');
15
15
  /** Sent when the dialog should close (Escape key, backdrop click, or programmatic). Triggers the closeModal command. */
16
- export const Closed = ts('Closed');
16
+ export const Closed = m('Closed');
17
17
  /** Placeholder message used when no action is needed, such as after a showModal or closeModal command completes. */
18
- export const NoOp = ts('NoOp');
18
+ export const NoOp = m('NoOp');
19
19
  /** Union of all messages the dialog component can produce. */
20
20
  export const Message = S.Union(Opened, Closed, NoOp);
21
21
  /** Creates an initial dialog model from a config. Defaults to closed. */
@@ -28,14 +28,14 @@ const dialogSelector = (id) => `#${id}`;
28
28
  /** Processes a dialog message and returns the next model and commands. */
29
29
  export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
30
30
  Opened: () => {
31
- const maybeShowCommand = Option.liftPredicate(Task.showModal(dialogSelector(model.id), () => NoOp()), () => !model.isOpen);
31
+ const maybeShowCommand = Option.liftPredicate(Task.showModal(dialogSelector(model.id)).pipe(Effect.ignore, Effect.as(NoOp())), () => !model.isOpen);
32
32
  return [
33
33
  evo(model, { isOpen: () => true }),
34
34
  Option.toArray(maybeShowCommand),
35
35
  ];
36
36
  },
37
37
  Closed: () => {
38
- const maybeCloseCommand = Option.liftPredicate(Task.closeModal(dialogSelector(model.id), () => NoOp()), () => model.isOpen);
38
+ const maybeCloseCommand = Option.liftPredicate(Task.closeModal(dialogSelector(model.id)).pipe(Effect.ignore, Effect.as(NoOp())), () => model.isOpen);
39
39
  return [
40
40
  evo(model, { isOpen: () => false }),
41
41
  Option.toArray(maybeCloseCommand),
@@ -1,6 +1,6 @@
1
1
  import { Schema as S } from 'effect';
2
+ import type { Command } from '../../command';
2
3
  import type { Html, TagName } from '../../html';
3
- import type { Command } from '../../runtime/runtime';
4
4
  /** Schema for the disclosure component's state, tracking its unique ID and open/closed status. */
5
5
  export declare const Model: S.Struct<{
6
6
  id: typeof S.String;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/disclosure/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAGxD,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAOpD,kGAAkG;AAClG,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,iFAAiF;AACjF,eAAO,MAAM,OAAO,4DAAgB,CAAA;AACpC,gFAAgF;AAChF,eAAO,MAAM,MAAM,2DAAe,CAAA;AAClC,kGAAkG;AAClG,eAAO,MAAM,IAAI,yDAAa,CAAA;AAE9B,kEAAkE;AAClE,eAAO,MAAM,OAAO,2LAAiC,CAAA;AAErD,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AACzC,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AACvC,MAAM,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,CAAA;AAEnC,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,iEAAiE;AACjE,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAC,CAAA;AAEF,6EAA6E;AAC7E,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAQF,8EAA8E;AAC9E,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CA4BvC,CAAA;AAIH,4DAA4D;AAC5D,MAAM,MAAM,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC;IACzC,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,KAAK,OAAO,CAAA;IACxD,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,IAAI,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,IAAI,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAC,CAAA;AAEF,oGAAoG;AACpG,eAAO,MAAM,IAAI,GAAI,OAAO,EAAE,QAAQ,UAAU,CAAC,OAAO,CAAC,KAAG,IAyF3D,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/disclosure/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAO/C,kGAAkG;AAClG,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,iFAAiF;AACjF,eAAO,MAAM,OAAO,4DAAe,CAAA;AACnC,gFAAgF;AAChF,eAAO,MAAM,MAAM,2DAAc,CAAA;AACjC,kGAAkG;AAClG,eAAO,MAAM,IAAI,yDAAY,CAAA;AAE7B,kEAAkE;AAClE,eAAO,MAAM,OAAO,2LAAiC,CAAA;AAErD,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AACzC,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AACvC,MAAM,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,CAAA;AAEnC,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,iEAAiE;AACjE,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAC,CAAA;AAEF,6EAA6E;AAC7E,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAQF,8EAA8E;AAC9E,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAkCvC,CAAA;AAIH,4DAA4D;AAC5D,MAAM,MAAM,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC;IACzC,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,KAAK,OAAO,CAAA;IACxD,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,IAAI,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,IAAI,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAC,CAAA;AAEF,oGAAoG;AACpG,eAAO,MAAM,IAAI,GAAI,OAAO,EAAE,QAAQ,UAAU,CAAC,OAAO,CAAC,KAAG,IAyF3D,CAAA"}
@@ -1,6 +1,6 @@
1
- import { Match as M, Option, Schema as S } from 'effect';
1
+ import { Effect, Match as M, Option, Schema as S } from 'effect';
2
2
  import { html } from '../../html';
3
- import { ts } from '../../schema';
3
+ import { m } from '../../message';
4
4
  import { evo } from '../../struct';
5
5
  import * as Task from '../../task';
6
6
  // MODEL
@@ -11,11 +11,11 @@ export const Model = S.Struct({
11
11
  });
12
12
  // MESSAGE
13
13
  /** Sent when the disclosure button is clicked. Toggles the open/closed state. */
14
- export const Toggled = ts('Toggled');
14
+ export const Toggled = m('Toggled');
15
15
  /** Sent to explicitly close the disclosure, regardless of its current state. */
16
- export const Closed = ts('Closed');
16
+ export const Closed = m('Closed');
17
17
  /** Placeholder message used when no action is needed, such as after a focus command completes. */
18
- export const NoOp = ts('NoOp');
18
+ export const NoOp = m('NoOp');
19
19
  /** Union of all messages the disclosure component can produce. */
20
20
  export const Message = S.Union(Toggled, Closed, NoOp);
21
21
  /** Creates an initial disclosure model from a config. Defaults to closed. */
@@ -29,14 +29,14 @@ const panelId = (id) => `${id}-panel`;
29
29
  /** Processes a disclosure message and returns the next model and commands. */
30
30
  export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
31
31
  Toggled: () => {
32
- const maybeFocusCommand = Option.liftPredicate(Task.focus(`#${buttonId(model.id)}`, () => NoOp()), () => model.isOpen);
32
+ const maybeFocusCommand = Option.liftPredicate(Task.focus(`#${buttonId(model.id)}`).pipe(Effect.ignore, Effect.as(NoOp())), () => model.isOpen);
33
33
  return [
34
34
  evo(model, { isOpen: () => !model.isOpen }),
35
35
  Option.toArray(maybeFocusCommand),
36
36
  ];
37
37
  },
38
38
  Closed: () => {
39
- const maybeFocusCommand = Option.liftPredicate(Task.focus(`#${buttonId(model.id)}`, () => NoOp()), () => model.isOpen);
39
+ const maybeFocusCommand = Option.liftPredicate(Task.focus(`#${buttonId(model.id)}`).pipe(Effect.ignore, Effect.as(NoOp())), () => model.isOpen);
40
40
  return [
41
41
  evo(model, { isOpen: () => false }),
42
42
  Option.toArray(maybeFocusCommand),
@@ -1 +1 @@
1
- {"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/ui/keyboard.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,MACpB,CAAA;AAEtC,eAAO,MAAM,qBAAqB,GAE9B,WAAW,MAAM,EACjB,cAAc,MAAM,EACpB,YAAY,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,MAEvC,YAAY,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,KAAG,MAQtC,CAAA;AAEL,eAAO,MAAM,UAAU,GACrB,SAAS,MAAM,EACf,aAAa,MAAM,EACnB,WAAW,MAAM,EACjB,cAAc,MAAM,EACpB,YAAY,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,KACrC,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAW1B,CAAA"}
1
+ {"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/ui/keyboard.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,MACpB,CAAA;AAEtC,eAAO,MAAM,qBAAqB,GAE9B,WAAW,MAAM,EACjB,cAAc,MAAM,EACpB,YAAY,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,MAEvC,YAAY,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,KAAG,MAMtC,CAAA;AAEL,eAAO,MAAM,UAAU,GACrB,SAAS,MAAM,EACf,aAAa,MAAM,EACnB,WAAW,MAAM,EACjB,cAAc,MAAM,EACpB,YAAY,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,KACrC,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAW1B,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { Array, Match as M, Option, Predicate, pipe } from 'effect';
2
2
  export const wrapIndex = (index, length) => ((index % length) + length) % length;
3
- export const findFirstEnabledIndex = (itemCount, focusedIndex, isDisabled) => (startIndex, direction) => pipe(itemCount, Array.makeBy((step) => wrapIndex(startIndex + step * direction, itemCount)), Array.findFirst(Predicate.not(isDisabled)), Option.getOrElse(() => focusedIndex));
3
+ export const findFirstEnabledIndex = (itemCount, focusedIndex, isDisabled) => (startIndex, direction) => pipe(itemCount, Array.makeBy(step => wrapIndex(startIndex + step * direction, itemCount)), Array.findFirst(Predicate.not(isDisabled)), Option.getOrElse(() => focusedIndex));
4
4
  export const keyToIndex = (nextKey, previousKey, itemCount, focusedIndex, isDisabled) => {
5
5
  const find = findFirstEnabledIndex(itemCount, focusedIndex, isDisabled);
6
6
  return (key) => M.value(key).pipe(M.when(nextKey, () => find(focusedIndex + 1, 1)), M.when(previousKey, () => find(focusedIndex - 1, -1)), M.whenOr('Home', 'PageUp', () => find(0, 1)), M.whenOr('End', 'PageDown', () => find(itemCount - 1, -1)), M.orElse(() => focusedIndex));
@@ -1,13 +1,19 @@
1
1
  import { Option, Schema as S } from 'effect';
2
+ import type { Command } from '../../command';
2
3
  import type { Html } from '../../html';
3
- import type { Command } from '../../runtime/runtime';
4
4
  /** Schema for the activation trigger — whether the user interacted via mouse or keyboard. */
5
5
  export declare const ActivationTrigger: S.Literal<["Pointer", "Keyboard"]>;
6
6
  export type ActivationTrigger = typeof ActivationTrigger.Type;
7
+ /** Schema for the transition animation state, tracking enter/leave phases for CSS transition coordination. */
8
+ export declare const TransitionState: S.Literal<["Idle", "EnterStart", "EnterAnimating", "LeaveStart", "LeaveAnimating"]>;
9
+ export type TransitionState = typeof TransitionState.Type;
7
10
  /** Schema for the menu component's state, tracking open/closed status, active item, activation trigger, and typeahead search. */
8
11
  export declare const Model: S.Struct<{
9
12
  id: typeof S.String;
10
13
  isOpen: typeof S.Boolean;
14
+ isAnimated: typeof S.Boolean;
15
+ isModal: typeof S.Boolean;
16
+ transitionState: S.Literal<["Idle", "EnterStart", "EnterAnimating", "LeaveStart", "LeaveAnimating"]>;
11
17
  maybeActiveItemIndex: S.OptionFromSelf<typeof S.Number>;
12
18
  activationTrigger: S.Literal<["Pointer", "Keyboard"]>;
13
19
  searchQuery: typeof S.String;
@@ -16,6 +22,12 @@ export declare const Model: S.Struct<{
16
22
  screenX: typeof S.Number;
17
23
  screenY: typeof S.Number;
18
24
  }>>;
25
+ maybeLastButtonPointerType: S.OptionFromSelf<typeof S.String>;
26
+ maybePointerOrigin: S.OptionFromSelf<S.Struct<{
27
+ screenX: typeof S.Number;
28
+ screenY: typeof S.Number;
29
+ timeStamp: typeof S.Number;
30
+ }>>;
19
31
  }>;
20
32
  export type Model = typeof Model.Type;
21
33
  /** Sent when the menu opens via button click or keyboard. Contains an optional initial active item index — None for pointer, Some for keyboard. */
@@ -27,14 +39,18 @@ export declare const Closed: import("../../schema").CallableTaggedStruct<"Closed
27
39
  /** Sent when focus leaves the menu items container via Tab key. */
28
40
  export declare const ClosedByTab: import("../../schema").CallableTaggedStruct<"ClosedByTab", {}>;
29
41
  /** Sent when an item is highlighted via arrow keys or mouse hover. Includes activation trigger. */
30
- export declare const ItemActivated: import("../../schema").CallableTaggedStruct<"ItemActivated", {
42
+ export declare const ActivatedItem: import("../../schema").CallableTaggedStruct<"ActivatedItem", {
31
43
  index: typeof S.Number;
32
44
  activationTrigger: S.Literal<["Pointer", "Keyboard"]>;
33
45
  }>;
34
46
  /** Sent when the mouse leaves an enabled item. */
35
- export declare const ItemDeactivated: import("../../schema").CallableTaggedStruct<"ItemDeactivated", {}>;
47
+ export declare const DeactivatedItem: import("../../schema").CallableTaggedStruct<"DeactivatedItem", {}>;
36
48
  /** Sent when an item is selected via Enter, Space, or click. */
37
- export declare const ItemSelected: import("../../schema").CallableTaggedStruct<"ItemSelected", {
49
+ export declare const SelectedItem: import("../../schema").CallableTaggedStruct<"SelectedItem", {
50
+ index: typeof S.Number;
51
+ }>;
52
+ /** Sent when Enter or Space is pressed on the active item, triggering a programmatic click on the DOM element. */
53
+ export declare const RequestedItemClick: import("../../schema").CallableTaggedStruct<"RequestedItemClick", {
38
54
  index: typeof S.Number;
39
55
  }>;
40
56
  /** Sent when a printable character is typed for typeahead search. */
@@ -43,49 +59,86 @@ export declare const Searched: import("../../schema").CallableTaggedStruct<"Sear
43
59
  maybeTargetIndex: S.OptionFromSelf<typeof S.Number>;
44
60
  }>;
45
61
  /** Sent after the search debounce period to clear the accumulated query. */
46
- export declare const SearchCleared: import("../../schema").CallableTaggedStruct<"SearchCleared", {
62
+ export declare const ClearedSearch: import("../../schema").CallableTaggedStruct<"ClearedSearch", {
47
63
  version: typeof S.Number;
48
64
  }>;
49
65
  /** Sent when the pointer moves over a menu item, carrying screen coordinates for tracked-pointer comparison. */
50
- export declare const PointerMovedOverItem: import("../../schema").CallableTaggedStruct<"PointerMovedOverItem", {
66
+ export declare const MovedPointerOverItem: import("../../schema").CallableTaggedStruct<"MovedPointerOverItem", {
51
67
  index: typeof S.Number;
52
68
  screenX: typeof S.Number;
53
69
  screenY: typeof S.Number;
54
70
  }>;
55
71
  /** Placeholder message used when no action is needed. */
56
72
  export declare const NoOp: import("../../schema").CallableTaggedStruct<"NoOp", {}>;
73
+ /** Sent internally when a double-rAF completes, advancing the transition to its animating phase. */
74
+ export declare const AdvancedTransitionFrame: import("../../schema").CallableTaggedStruct<"AdvancedTransitionFrame", {}>;
75
+ /** Sent internally when all CSS transitions on the menu items container have completed. */
76
+ export declare const EndedTransition: import("../../schema").CallableTaggedStruct<"EndedTransition", {}>;
77
+ /** Sent when the user presses a pointer device on the menu button. Records pointer type and toggles for mouse. */
78
+ export declare const PressedPointerOnButton: import("../../schema").CallableTaggedStruct<"PressedPointerOnButton", {
79
+ pointerType: typeof S.String;
80
+ button: typeof S.Number;
81
+ screenX: typeof S.Number;
82
+ screenY: typeof S.Number;
83
+ timeStamp: typeof S.Number;
84
+ }>;
85
+ /** Sent when the user releases a pointer on the items container, enabling drag-to-select for mouse. */
86
+ export declare const ReleasedPointerOnItems: import("../../schema").CallableTaggedStruct<"ReleasedPointerOnItems", {
87
+ screenX: typeof S.Number;
88
+ screenY: typeof S.Number;
89
+ timeStamp: typeof S.Number;
90
+ }>;
57
91
  /** Union of all messages the menu component can produce. */
58
92
  export declare const Message: S.Union<[import("../../schema").CallableTaggedStruct<"Opened", {
59
93
  maybeActiveItemIndex: S.OptionFromSelf<typeof S.Number>;
60
- }>, import("../../schema").CallableTaggedStruct<"Closed", {}>, import("../../schema").CallableTaggedStruct<"ClosedByTab", {}>, import("../../schema").CallableTaggedStruct<"ItemActivated", {
94
+ }>, import("../../schema").CallableTaggedStruct<"Closed", {}>, import("../../schema").CallableTaggedStruct<"ClosedByTab", {}>, import("../../schema").CallableTaggedStruct<"ActivatedItem", {
61
95
  index: typeof S.Number;
62
96
  activationTrigger: S.Literal<["Pointer", "Keyboard"]>;
63
- }>, import("../../schema").CallableTaggedStruct<"ItemDeactivated", {}>, import("../../schema").CallableTaggedStruct<"ItemSelected", {
97
+ }>, import("../../schema").CallableTaggedStruct<"DeactivatedItem", {}>, import("../../schema").CallableTaggedStruct<"SelectedItem", {
64
98
  index: typeof S.Number;
65
- }>, import("../../schema").CallableTaggedStruct<"PointerMovedOverItem", {
99
+ }>, import("../../schema").CallableTaggedStruct<"MovedPointerOverItem", {
66
100
  index: typeof S.Number;
67
101
  screenX: typeof S.Number;
68
102
  screenY: typeof S.Number;
103
+ }>, import("../../schema").CallableTaggedStruct<"RequestedItemClick", {
104
+ index: typeof S.Number;
69
105
  }>, import("../../schema").CallableTaggedStruct<"Searched", {
70
106
  key: typeof S.String;
71
107
  maybeTargetIndex: S.OptionFromSelf<typeof S.Number>;
72
- }>, import("../../schema").CallableTaggedStruct<"SearchCleared", {
108
+ }>, import("../../schema").CallableTaggedStruct<"ClearedSearch", {
73
109
  version: typeof S.Number;
74
- }>, import("../../schema").CallableTaggedStruct<"NoOp", {}>]>;
110
+ }>, import("../../schema").CallableTaggedStruct<"NoOp", {}>, import("../../schema").CallableTaggedStruct<"AdvancedTransitionFrame", {}>, import("../../schema").CallableTaggedStruct<"EndedTransition", {}>, import("../../schema").CallableTaggedStruct<"PressedPointerOnButton", {
111
+ pointerType: typeof S.String;
112
+ button: typeof S.Number;
113
+ screenX: typeof S.Number;
114
+ screenY: typeof S.Number;
115
+ timeStamp: typeof S.Number;
116
+ }>, import("../../schema").CallableTaggedStruct<"ReleasedPointerOnItems", {
117
+ screenX: typeof S.Number;
118
+ screenY: typeof S.Number;
119
+ timeStamp: typeof S.Number;
120
+ }>]>;
75
121
  export type Opened = typeof Opened.Type;
76
122
  export type Closed = typeof Closed.Type;
77
123
  export type ClosedByTab = typeof ClosedByTab.Type;
78
- export type ItemActivated = typeof ItemActivated.Type;
79
- export type ItemDeactivated = typeof ItemDeactivated.Type;
80
- export type ItemSelected = typeof ItemSelected.Type;
81
- export type PointerMovedOverItem = typeof PointerMovedOverItem.Type;
124
+ export type ActivatedItem = typeof ActivatedItem.Type;
125
+ export type DeactivatedItem = typeof DeactivatedItem.Type;
126
+ export type SelectedItem = typeof SelectedItem.Type;
127
+ export type MovedPointerOverItem = typeof MovedPointerOverItem.Type;
128
+ export type RequestedItemClick = typeof RequestedItemClick.Type;
82
129
  export type Searched = typeof Searched.Type;
83
- export type SearchCleared = typeof SearchCleared.Type;
130
+ export type ClearedSearch = typeof ClearedSearch.Type;
84
131
  export type NoOp = typeof NoOp.Type;
132
+ export type AdvancedTransitionFrame = typeof AdvancedTransitionFrame.Type;
133
+ export type EndedTransition = typeof EndedTransition.Type;
134
+ export type PressedPointerOnButton = typeof PressedPointerOnButton.Type;
135
+ export type ReleasedPointerOnItems = typeof ReleasedPointerOnItems.Type;
85
136
  export type Message = typeof Message.Type;
86
- /** Configuration for creating a menu model with `init`. */
137
+ /** Configuration for creating a menu model with `init`. `isAnimated` enables CSS transition coordination (default `false`). `isModal` locks page scroll and inerts other elements when open (default `true`). */
87
138
  export type InitConfig = Readonly<{
88
139
  id: string;
140
+ isAnimated?: boolean;
141
+ isModal?: boolean;
89
142
  }>;
90
143
  /** Creates an initial menu model from a config. Defaults to closed with no active item. */
91
144
  export declare const init: (config: InitConfig) => Model;
@@ -104,7 +157,7 @@ export type GroupHeading = Readonly<{
104
157
  /** Configuration for rendering a menu with `view`. */
105
158
  export type ViewConfig<Message, Item extends string> = Readonly<{
106
159
  model: Model;
107
- toMessage: (message: Opened | Closed | ClosedByTab | ItemActivated | ItemDeactivated | ItemSelected | PointerMovedOverItem | Searched) => Message;
160
+ toMessage: (message: Opened | Closed | ClosedByTab | ActivatedItem | DeactivatedItem | SelectedItem | MovedPointerOverItem | RequestedItemClick | Searched | PressedPointerOnButton | ReleasedPointerOnItems | NoOp) => Message;
108
161
  items: ReadonlyArray<Item>;
109
162
  itemToConfig: (item: Item, context: Readonly<{
110
163
  isActive: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/index.ts"],"names":[],"mappings":"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"}