foldkit 0.89.0 → 0.90.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.
Files changed (118) hide show
  1. package/README.md +19 -10
  2. package/dist/command/index.d.ts.map +1 -1
  3. package/dist/command/index.js +3 -11
  4. package/dist/devTools/overlay.d.ts +3 -3
  5. package/dist/devTools/overlay.d.ts.map +1 -1
  6. package/dist/devTools/overlay.js +209 -171
  7. package/dist/devTools/protocol.d.ts +77 -19
  8. package/dist/devTools/protocol.d.ts.map +1 -1
  9. package/dist/devTools/protocol.js +10 -5
  10. package/dist/devTools/serialize.d.ts +8 -2
  11. package/dist/devTools/serialize.d.ts.map +1 -1
  12. package/dist/devTools/serialize.js +11 -2
  13. package/dist/devTools/store.d.ts +9 -5
  14. package/dist/devTools/store.d.ts.map +1 -1
  15. package/dist/devTools/store.js +13 -13
  16. package/dist/devTools/webSocketBridge.d.ts.map +1 -1
  17. package/dist/devTools/webSocketBridge.js +2 -2
  18. package/dist/html/index.d.ts +12 -0
  19. package/dist/html/index.d.ts.map +1 -1
  20. package/dist/html/index.js +20 -4
  21. package/dist/mount/index.d.ts +64 -21
  22. package/dist/mount/index.d.ts.map +1 -1
  23. package/dist/mount/index.js +43 -32
  24. package/dist/mount/public.d.ts +1 -1
  25. package/dist/mount/public.d.ts.map +1 -1
  26. package/dist/runtime/crashUI.js +30 -30
  27. package/dist/runtime/runtime.d.ts.map +1 -1
  28. package/dist/runtime/runtime.js +4 -4
  29. package/dist/test/apps/bubbling.js +4 -4
  30. package/dist/test/apps/disabledButton.js +10 -10
  31. package/dist/test/apps/fileUpload.d.ts.map +1 -1
  32. package/dist/test/apps/fileUpload.js +13 -13
  33. package/dist/test/apps/interactions.d.ts.map +1 -1
  34. package/dist/test/apps/interactions.js +15 -15
  35. package/dist/test/apps/keypress.js +8 -8
  36. package/dist/test/apps/login.d.ts.map +1 -1
  37. package/dist/test/apps/login.js +32 -24
  38. package/dist/test/apps/logoutButton.d.ts.map +1 -1
  39. package/dist/test/apps/logoutButton.js +2 -2
  40. package/dist/test/apps/mountPanel.d.ts +19 -3
  41. package/dist/test/apps/mountPanel.d.ts.map +1 -1
  42. package/dist/test/apps/mountPanel.js +41 -20
  43. package/dist/test/apps/multiRole.js +3 -3
  44. package/dist/test/apps/pointer.d.ts.map +1 -1
  45. package/dist/test/apps/pointer.js +11 -11
  46. package/dist/test/apps/resumeUpload.d.ts.map +1 -1
  47. package/dist/test/apps/resumeUpload.js +8 -8
  48. package/dist/test/internal.d.ts +50 -20
  49. package/dist/test/internal.d.ts.map +1 -1
  50. package/dist/test/internal.js +65 -74
  51. package/dist/test/scene.d.ts +7 -7
  52. package/dist/test/scene.d.ts.map +1 -1
  53. package/dist/test/scene.js +42 -37
  54. package/dist/test/story.d.ts.map +1 -1
  55. package/dist/test/story.js +2 -2
  56. package/dist/ui/anchor.d.ts +12 -8
  57. package/dist/ui/anchor.d.ts.map +1 -1
  58. package/dist/ui/anchor.js +41 -16
  59. package/dist/ui/animation/index.js +24 -24
  60. package/dist/ui/button/index.d.ts.map +1 -1
  61. package/dist/ui/button/index.js +6 -6
  62. package/dist/ui/calendar/index.d.ts.map +1 -1
  63. package/dist/ui/calendar/index.js +101 -99
  64. package/dist/ui/checkbox/index.d.ts.map +1 -1
  65. package/dist/ui/checkbox/index.js +15 -15
  66. package/dist/ui/combobox/multi.d.ts +1 -7
  67. package/dist/ui/combobox/multi.d.ts.map +1 -1
  68. package/dist/ui/combobox/shared.d.ts +14 -5
  69. package/dist/ui/combobox/shared.d.ts.map +1 -1
  70. package/dist/ui/combobox/shared.js +137 -125
  71. package/dist/ui/combobox/single.d.ts +1 -7
  72. package/dist/ui/combobox/single.d.ts.map +1 -1
  73. package/dist/ui/datePicker/index.js +4 -4
  74. package/dist/ui/dialog/index.d.ts.map +1 -1
  75. package/dist/ui/dialog/index.js +27 -27
  76. package/dist/ui/disclosure/index.d.ts.map +1 -1
  77. package/dist/ui/disclosure/index.js +24 -22
  78. package/dist/ui/dragAndDrop/index.d.ts.map +1 -1
  79. package/dist/ui/dragAndDrop/index.js +15 -15
  80. package/dist/ui/fieldset/index.js +6 -6
  81. package/dist/ui/fileDrop/index.d.ts +2 -2
  82. package/dist/ui/fileDrop/index.d.ts.map +1 -1
  83. package/dist/ui/fileDrop/index.js +16 -16
  84. package/dist/ui/input/index.d.ts.map +1 -1
  85. package/dist/ui/input/index.js +15 -13
  86. package/dist/ui/listbox/multi.d.ts +1 -7
  87. package/dist/ui/listbox/multi.d.ts.map +1 -1
  88. package/dist/ui/listbox/shared.d.ts +12 -3
  89. package/dist/ui/listbox/shared.d.ts.map +1 -1
  90. package/dist/ui/listbox/shared.js +91 -89
  91. package/dist/ui/listbox/single.d.ts +1 -7
  92. package/dist/ui/listbox/single.d.ts.map +1 -1
  93. package/dist/ui/menu/index.d.ts +12 -3
  94. package/dist/ui/menu/index.d.ts.map +1 -1
  95. package/dist/ui/menu/index.js +75 -77
  96. package/dist/ui/popover/index.d.ts +13 -3
  97. package/dist/ui/popover/index.d.ts.map +1 -1
  98. package/dist/ui/popover/index.js +62 -53
  99. package/dist/ui/radioGroup/index.d.ts.map +1 -1
  100. package/dist/ui/radioGroup/index.js +20 -20
  101. package/dist/ui/select/index.d.ts.map +1 -1
  102. package/dist/ui/select/index.js +13 -11
  103. package/dist/ui/slider/index.d.ts.map +1 -1
  104. package/dist/ui/slider/index.js +26 -26
  105. package/dist/ui/switch/index.d.ts.map +1 -1
  106. package/dist/ui/switch/index.js +14 -14
  107. package/dist/ui/tabs/index.d.ts.map +1 -1
  108. package/dist/ui/tabs/index.js +40 -36
  109. package/dist/ui/textarea/index.d.ts.map +1 -1
  110. package/dist/ui/textarea/index.js +15 -13
  111. package/dist/ui/toast/index.d.ts.map +1 -1
  112. package/dist/ui/toast/index.js +27 -27
  113. package/dist/ui/tooltip/index.d.ts +11 -2
  114. package/dist/ui/tooltip/index.d.ts.map +1 -1
  115. package/dist/ui/tooltip/index.js +33 -33
  116. package/dist/ui/virtualList/index.d.ts.map +1 -1
  117. package/dist/ui/virtualList/index.js +18 -15
  118. package/package.json +1 -1
@@ -6,7 +6,7 @@ import { createLazy, html, } from '../../html/index.js';
6
6
  import { m } from '../../message/index.js';
7
7
  import * as Mount from '../../mount/index.js';
8
8
  import { evo } from '../../struct/index.js';
9
- import { anchorSetup, portalToBody } from '../anchor.js';
9
+ import { AnchorConfig, anchorSetup, portalToBody } from '../anchor.js';
10
10
  // NOTE: Animation imports are split across schema + update to avoid a circular
11
11
  // dependency: animation → html → runtime → devtools → menu → animation.
12
12
  // The barrel (../animation) imports from html, which starts the cycle.
@@ -391,12 +391,14 @@ export const update = (model, message) => {
391
391
  /** The anchor-positioning Mount this Menu renders on its panel. Exposed so
392
392
  * Scene tests can call `Scene.Mount.resolve(AnchorMenu, CompletedAnchorMenu())`
393
393
  * to acknowledge the mount produced by the rendered panel. */
394
- export const AnchorMenu = Mount.define('AnchorMenu', CompletedAnchorMenu);
394
+ export const AnchorMenu = Mount.define('AnchorMenu', { buttonId: S.String, anchor: AnchorConfig }, CompletedAnchorMenu)(({ buttonId, anchor }) => (element) => Effect.sync(() => {
395
+ const cleanup = anchorSetup({ buttonId, anchor })(element);
396
+ return { message: CompletedAnchorMenu(), cleanup };
397
+ }));
395
398
  /** The backdrop-portaling Mount this Menu renders. Exposed so Scene tests can
396
399
  * call `Scene.Mount.resolve(PortalMenuBackdrop, CompletedPortalMenuBackdrop())` to
397
400
  * acknowledge the mount produced by the rendered backdrop. */
398
- export const PortalMenuBackdrop = Mount.define('PortalMenuBackdrop', CompletedPortalMenuBackdrop);
399
- const portalMenuBackdrop = PortalMenuBackdrop((element) => Effect.sync(() => {
401
+ export const PortalMenuBackdrop = Mount.define('PortalMenuBackdrop', CompletedPortalMenuBackdrop)((element) => Effect.sync(() => {
400
402
  const cleanup = portalToBody(element);
401
403
  return { message: CompletedPortalMenuBackdrop(), cleanup };
402
404
  }));
@@ -413,7 +415,7 @@ export { groupContiguous, resolveTypeaheadMatch };
413
415
  const itemId = (id, index) => `${id}-item-${index}`;
414
416
  /** Renders a headless menu with typeahead search, keyboard navigation, and aria-activedescendant focus management. */
415
417
  export const view = (config) => {
416
- const { div, AriaActiveDescendant, AriaControls, AriaDisabled, AriaExpanded, AriaHasPopup, AriaLabelledBy, Class, DataAttribute, Id, OnBlur, OnClick, OnKeyDownPreventDefault, OnKeyUpPreventDefault, OnMount, OnPointerDown, OnPointerLeave, OnPointerMove, OnPointerUp, Role, Style, Tabindex, Type, keyed, } = html();
418
+ const h = html();
417
419
  const { model: { id, isOpen, animation: { transitionState }, maybeActiveItemIndex, searchQuery, maybeLastButtonPointerType, }, toParentMessage, onSelectedItem, items, itemToConfig, isItemDisabled, itemToSearchText = (item) => item, isButtonDisabled, buttonContent, buttonClassName, buttonAttributes = [], itemsClassName, itemsAttributes = [], itemsScrollClassName, itemsScrollAttributes = [], backdropClassName, backdropAttributes = [], className, attributes = [], itemGroupKey, groupToHeading, groupClassName, groupAttributes = [], separatorClassName, separatorAttributes = [], anchor, } = config;
418
420
  const dispatchSelectedItem = (index) => onSelectedItem
419
421
  ? onSelectedItem(index)
@@ -421,19 +423,19 @@ export const view = (config) => {
421
423
  const isLeaving = transitionState === 'LeaveStart' || transitionState === 'LeaveAnimating';
422
424
  const isVisible = isOpen || isLeaving;
423
425
  const animationAttributes = M.value(transitionState).pipe(M.when('EnterStart', () => [
424
- DataAttribute('closed', ''),
425
- DataAttribute('enter', ''),
426
- DataAttribute('transition', ''),
426
+ h.DataAttribute('closed', ''),
427
+ h.DataAttribute('enter', ''),
428
+ h.DataAttribute('transition', ''),
427
429
  ]), M.when('EnterAnimating', () => [
428
- DataAttribute('enter', ''),
429
- DataAttribute('transition', ''),
430
+ h.DataAttribute('enter', ''),
431
+ h.DataAttribute('transition', ''),
430
432
  ]), M.when('LeaveStart', () => [
431
- DataAttribute('leave', ''),
432
- DataAttribute('transition', ''),
433
+ h.DataAttribute('leave', ''),
434
+ h.DataAttribute('transition', ''),
433
435
  ]), M.when('LeaveAnimating', () => [
434
- DataAttribute('closed', ''),
435
- DataAttribute('leave', ''),
436
- DataAttribute('transition', ''),
436
+ h.DataAttribute('closed', ''),
437
+ h.DataAttribute('leave', ''),
438
+ h.DataAttribute('transition', ''),
437
439
  ]), M.orElse(() => []));
438
440
  const isDisabled = (index) => Predicate.isNotUndefined(isItemDisabled) &&
439
441
  pipe(items, Array.get(index), Option.exists(item => isItemDisabled(item, index)));
@@ -483,61 +485,55 @@ export const view = (config) => {
483
485
  })))), M.when(isPrintableKey, () => searchForKey(key)), M.orElse(() => Option.none()));
484
486
  const handleItemsPointerUp = (screenX, screenY, pointerType, timeStamp) => OptionExt.when(pointerType === 'mouse', toParentMessage(ReleasedPointerOnItems({ screenX, screenY, timeStamp })));
485
487
  const resolvedButtonAttributes = [
486
- Id(`${id}-button`),
487
- Type('button'),
488
- AriaHasPopup('menu'),
489
- AriaExpanded(isVisible),
490
- AriaControls(`${id}-items`),
488
+ h.Id(`${id}-button`),
489
+ h.Type('button'),
490
+ h.AriaHasPopup('menu'),
491
+ h.AriaExpanded(isVisible),
492
+ h.AriaControls(`${id}-items`),
491
493
  ...(isButtonDisabled
492
- ? [AriaDisabled(true), DataAttribute('disabled', '')]
494
+ ? [h.AriaDisabled(true), h.DataAttribute('disabled', '')]
493
495
  : [
494
- OnPointerDown(handleButtonPointerDown),
495
- OnKeyDownPreventDefault(handleButtonKeyDown),
496
- OnKeyUpPreventDefault(handleSpaceKeyUp),
497
- OnClick(handleButtonClick()),
496
+ h.OnPointerDown(handleButtonPointerDown),
497
+ h.OnKeyDownPreventDefault(handleButtonKeyDown),
498
+ h.OnKeyUpPreventDefault(handleSpaceKeyUp),
499
+ h.OnClick(handleButtonClick()),
498
500
  ]),
499
501
  ...(isVisible
500
502
  ? [
501
- DataAttribute('open', ''),
502
- Style({ position: 'relative', zIndex: '1' }),
503
+ h.DataAttribute('open', ''),
504
+ h.Style({ position: 'relative', zIndex: '1' }),
503
505
  ]
504
506
  : []),
505
- ...(buttonClassName ? [Class(buttonClassName)] : []),
507
+ ...(buttonClassName ? [h.Class(buttonClassName)] : []),
506
508
  ...buttonAttributes,
507
509
  ];
508
510
  const maybeActiveDescendant = Option.match(maybeActiveItemIndex, {
509
511
  onNone: () => [],
510
- onSome: index => [AriaActiveDescendant(itemId(id, index))],
512
+ onSome: index => [h.AriaActiveDescendant(itemId(id, index))],
511
513
  });
512
514
  const anchorAttributes = anchor
513
515
  ? [
514
- Style({ position: 'absolute', margin: '0', visibility: 'hidden' }),
515
- OnMount(Mount.mapMessage(AnchorMenu((items) => Effect.sync(() => {
516
- const cleanup = anchorSetup({
517
- buttonId: `${id}-button`,
518
- anchor,
519
- })(items);
520
- return { message: CompletedAnchorMenu(), cleanup };
521
- })), toParentMessage)),
516
+ h.Style({ position: 'absolute', margin: '0', visibility: 'hidden' }),
517
+ h.OnMount(Mount.mapMessage(AnchorMenu({ buttonId: `${id}-button`, anchor }), toParentMessage)),
522
518
  ]
523
519
  : [];
524
520
  const itemsContainerAttributes = [
525
- Id(`${id}-items`),
526
- Role('menu'),
527
- AriaLabelledBy(`${id}-button`),
521
+ h.Id(`${id}-items`),
522
+ h.Role('menu'),
523
+ h.AriaLabelledBy(`${id}-button`),
528
524
  ...maybeActiveDescendant,
529
- Tabindex(0),
525
+ h.Tabindex(0),
530
526
  ...anchorAttributes,
531
527
  ...animationAttributes,
532
528
  ...(isLeaving
533
529
  ? []
534
530
  : [
535
- OnKeyDownPreventDefault(handleItemsKeyDown),
536
- OnKeyUpPreventDefault(handleSpaceKeyUp),
537
- OnPointerUp(handleItemsPointerUp),
538
- OnBlur(toParentMessage(BlurredItems())),
531
+ h.OnKeyDownPreventDefault(handleItemsKeyDown),
532
+ h.OnKeyUpPreventDefault(handleSpaceKeyUp),
533
+ h.OnPointerUp(handleItemsPointerUp),
534
+ h.OnBlur(toParentMessage(BlurredItems())),
539
535
  ]),
540
- ...(itemsClassName ? [Class(itemsClassName)] : []),
536
+ ...(itemsClassName ? [h.Class(itemsClassName)] : []),
541
537
  ...itemsAttributes,
542
538
  ];
543
539
  const menuItems = Array.map(items, (item, index) => {
@@ -548,25 +544,25 @@ export const view = (config) => {
548
544
  isDisabled: isDisabledItem,
549
545
  });
550
546
  const isInteractive = !isDisabledItem && !isLeaving;
551
- return keyed('div')(itemId(id, index), [
552
- Id(itemId(id, index)),
553
- Role('menuitem'),
554
- ...(isActiveItem ? [DataAttribute('active', '')] : []),
547
+ return h.keyed('div')(itemId(id, index), [
548
+ h.Id(itemId(id, index)),
549
+ h.Role('menuitem'),
550
+ ...(isActiveItem ? [h.DataAttribute('active', '')] : []),
555
551
  ...(isDisabledItem
556
- ? [AriaDisabled(true), DataAttribute('disabled', '')]
552
+ ? [h.AriaDisabled(true), h.DataAttribute('disabled', '')]
557
553
  : []),
558
554
  ...(isInteractive
559
555
  ? [
560
- OnClick(dispatchSelectedItem(index)),
556
+ h.OnClick(dispatchSelectedItem(index)),
561
557
  ...(isActiveItem
562
558
  ? []
563
559
  : [
564
- OnPointerMove((screenX, screenY, pointerType) => OptionExt.when(pointerType !== 'touch', toParentMessage(MovedPointerOverItem({ index, screenX, screenY })))),
560
+ h.OnPointerMove((screenX, screenY, pointerType) => OptionExt.when(pointerType !== 'touch', toParentMessage(MovedPointerOverItem({ index, screenX, screenY })))),
565
561
  ]),
566
- OnPointerLeave(pointerType => OptionExt.when(pointerType !== 'touch', toParentMessage(DeactivatedItem()))),
562
+ h.OnPointerLeave(pointerType => OptionExt.when(pointerType !== 'touch', toParentMessage(DeactivatedItem()))),
567
563
  ]
568
564
  : []),
569
- ...(itemConfig.className ? [Class(itemConfig.className)] : []),
565
+ ...(itemConfig.className ? [h.Class(itemConfig.className)] : []),
570
566
  ], [itemConfig.content]);
571
567
  });
572
568
  const renderGroupedItems = () => {
@@ -583,27 +579,27 @@ export const view = (config) => {
583
579
  const headingElement = Option.match(maybeHeading, {
584
580
  onNone: () => [],
585
581
  onSome: heading => [
586
- keyed('div')(headingId, [
587
- Id(headingId),
588
- Role('presentation'),
589
- ...(heading.className ? [Class(heading.className)] : []),
582
+ h.keyed('div')(headingId, [
583
+ h.Id(headingId),
584
+ h.Role('presentation'),
585
+ ...(heading.className ? [h.Class(heading.className)] : []),
590
586
  ], [heading.content]),
591
587
  ],
592
588
  });
593
589
  const groupContent = [...headingElement, ...segment.items];
594
- const groupElement = keyed('div')(`${id}-group-${segment.key}`, [
595
- Role('group'),
596
- ...(Option.isSome(maybeHeading) ? [AriaLabelledBy(headingId)] : []),
597
- ...(groupClassName ? [Class(groupClassName)] : []),
590
+ const groupElement = h.keyed('div')(`${id}-group-${segment.key}`, [
591
+ h.Role('group'),
592
+ ...(Option.isSome(maybeHeading) ? [h.AriaLabelledBy(headingId)] : []),
593
+ ...(groupClassName ? [h.Class(groupClassName)] : []),
598
594
  ...groupAttributes,
599
595
  ], groupContent);
600
596
  const separator = segmentIndex > 0 &&
601
597
  (separatorClassName ||
602
598
  Array.isReadonlyArrayNonEmpty(separatorAttributes))
603
599
  ? [
604
- keyed('div')(`${id}-separator-${segmentIndex}`, [
605
- Role('separator'),
606
- ...(separatorClassName ? [Class(separatorClassName)] : []),
600
+ h.keyed('div')(`${id}-separator-${segmentIndex}`, [
601
+ h.Role('separator'),
602
+ ...(separatorClassName ? [h.Class(separatorClassName)] : []),
607
603
  ...separatorAttributes,
608
604
  ], []),
609
605
  ]
@@ -611,32 +607,34 @@ export const view = (config) => {
611
607
  return [...separator, groupElement];
612
608
  });
613
609
  };
614
- const backdrop = keyed('div')(`${id}-backdrop`, [
615
- OnMount(Mount.mapMessage(portalMenuBackdrop, toParentMessage)),
616
- ...(isLeaving ? [] : [OnClick(toParentMessage(Closed()))]),
617
- ...(backdropClassName ? [Class(backdropClassName)] : []),
610
+ const backdrop = h.keyed('div')(`${id}-backdrop`, [
611
+ h.OnMount(Mount.mapMessage(PortalMenuBackdrop(), toParentMessage)),
612
+ ...(isLeaving ? [] : [h.OnClick(toParentMessage(Closed()))]),
613
+ ...(backdropClassName ? [h.Class(backdropClassName)] : []),
618
614
  ...backdropAttributes,
619
615
  ], []);
620
616
  const renderedItems = renderGroupedItems();
621
617
  const scrollableItems = itemsScrollClassName || Array.isReadonlyArrayNonEmpty(itemsScrollAttributes)
622
618
  ? [
623
- div([
624
- ...(itemsScrollClassName ? [Class(itemsScrollClassName)] : []),
619
+ h.div([
620
+ ...(itemsScrollClassName ? [h.Class(itemsScrollClassName)] : []),
625
621
  ...itemsScrollAttributes,
626
622
  ], renderedItems),
627
623
  ]
628
624
  : renderedItems;
629
625
  const visibleContent = [
630
626
  backdrop,
631
- keyed('div')(`${id}-items-container`, itemsContainerAttributes, scrollableItems),
627
+ h.keyed('div')(`${id}-items-container`, itemsContainerAttributes, scrollableItems),
632
628
  ];
633
629
  const wrapperAttributes = [
634
- ...(className ? [Class(className)] : []),
630
+ ...(className ? [h.Class(className)] : []),
635
631
  ...attributes,
636
- ...(isVisible ? [DataAttribute('open', '')] : []),
632
+ ...(isVisible ? [h.DataAttribute('open', '')] : []),
637
633
  ];
638
- return div(wrapperAttributes, [
639
- keyed('button')(`${id}-button`, resolvedButtonAttributes, [buttonContent]),
634
+ return h.div(wrapperAttributes, [
635
+ h.keyed('button')(`${id}-button`, resolvedButtonAttributes, [
636
+ buttonContent,
637
+ ]),
640
638
  ...(isVisible ? visibleContent : []),
641
639
  ]);
642
640
  };
@@ -2,7 +2,7 @@ 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';
5
- import type { AnchorConfig } from '../anchor.js';
5
+ import { AnchorConfig } from '../anchor.js';
6
6
  /** Schema for the popover component's state, tracking open/closed status and animation lifecycle. */
7
7
  export declare const Model: S.Struct<{
8
8
  readonly id: S.String;
@@ -140,13 +140,23 @@ export declare const update: (model: Model, message: Message) => UpdateReturn;
140
140
  /** The anchor-positioning Mount this Popover renders on its panel. Exposed so
141
141
  * Scene tests can call `Scene.Mount.resolve(AnchorPopover, CompletedAnchorPopover())`
142
142
  * to acknowledge the mount produced by the rendered panel. */
143
- export declare const AnchorPopover: Mount.MountDefinition<"AnchorPopover", {
143
+ export declare const AnchorPopover: Mount.MountDefinitionWithArgs<"AnchorPopover", {
144
+ buttonId: S.String;
145
+ anchor: S.Struct<{
146
+ readonly placement: S.optional<S.Literals<readonly ["top", "right", "bottom", "left", "top-start", "top-end", "right-start", "right-end", "bottom-start", "bottom-end", "left-start", "left-end"]>>;
147
+ readonly gap: S.optional<S.Number>;
148
+ readonly offset: S.optional<S.Number>;
149
+ readonly padding: S.optional<S.Number>;
150
+ readonly portal: S.optional<S.Boolean>;
151
+ }>;
152
+ focusSelector: S.optional<S.String>;
153
+ }, {
144
154
  readonly _tag: "CompletedAnchorPopover";
145
155
  }>;
146
156
  /** The backdrop-portaling Mount this Popover renders. Exposed so Scene tests can
147
157
  * call `Scene.Mount.resolve(PortalPopoverBackdrop, CompletedPortalPopoverBackdrop())` to
148
158
  * acknowledge the mount produced by the rendered backdrop. */
149
- export declare const PortalPopoverBackdrop: Mount.MountDefinition<"PortalPopoverBackdrop", {
159
+ export declare const PortalPopoverBackdrop: Mount.MountDefinitionNoArgs<"PortalPopoverBackdrop", {
150
160
  readonly _tag: "CompletedPortalPopoverBackdrop";
151
161
  }>;
152
162
  /** Programmatically opens the popover, updating the model and returning
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/popover/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/popover/index.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { createLazy, html, } from '../../html/index.js';
6
6
  import { m } from '../../message/index.js';
7
7
  import * as Mount from '../../mount/index.js';
8
8
  import { evo } from '../../struct/index.js';
9
- import { anchorSetup, portalToBody } from '../anchor.js';
9
+ import { AnchorConfig, anchorSetup, portalToBody } from '../anchor.js';
10
10
  // NOTE: Animation imports are split across schema + update to avoid a circular
11
11
  // dependency: animation → html → runtime → devtools → popover → animation.
12
12
  // The barrel (../animation) imports from html, which starts the cycle.
@@ -208,12 +208,24 @@ export const update = (model, message) => {
208
208
  /** The anchor-positioning Mount this Popover renders on its panel. Exposed so
209
209
  * Scene tests can call `Scene.Mount.resolve(AnchorPopover, CompletedAnchorPopover())`
210
210
  * to acknowledge the mount produced by the rendered panel. */
211
- export const AnchorPopover = Mount.define('AnchorPopover', CompletedAnchorPopover);
211
+ export const AnchorPopover = Mount.define('AnchorPopover', {
212
+ buttonId: S.String,
213
+ anchor: AnchorConfig,
214
+ focusSelector: S.optional(S.String),
215
+ }, CompletedAnchorPopover)(({ buttonId, anchor, focusSelector }) => (element) => Effect.sync(() => {
216
+ const cleanup = anchorSetup({
217
+ buttonId,
218
+ anchor,
219
+ interceptTab: false,
220
+ focusAfterPosition: true,
221
+ ...(focusSelector !== undefined && { focusSelector }),
222
+ })(element);
223
+ return { message: CompletedAnchorPopover(), cleanup };
224
+ }));
212
225
  /** The backdrop-portaling Mount this Popover renders. Exposed so Scene tests can
213
226
  * call `Scene.Mount.resolve(PortalPopoverBackdrop, CompletedPortalPopoverBackdrop())` to
214
227
  * acknowledge the mount produced by the rendered backdrop. */
215
- export const PortalPopoverBackdrop = Mount.define('PortalPopoverBackdrop', CompletedPortalPopoverBackdrop);
216
- const portalPopoverBackdrop = PortalPopoverBackdrop((element) => Effect.sync(() => {
228
+ export const PortalPopoverBackdrop = Mount.define('PortalPopoverBackdrop', CompletedPortalPopoverBackdrop)((element) => Effect.sync(() => {
217
229
  const cleanup = portalToBody(element);
218
230
  return { message: CompletedPortalPopoverBackdrop(), cleanup };
219
231
  }));
@@ -225,26 +237,26 @@ export const open = (model) => update(model, Opened());
225
237
  export const close = (model) => update(model, Closed());
226
238
  /** Renders a headless popover with a trigger button and a floating panel. Uses the disclosure ARIA pattern (aria-expanded + aria-controls) with no role on the panel. */
227
239
  export const view = (config) => {
228
- const { div, AriaControls, AriaDisabled, AriaExpanded, Class, DataAttribute, Id, OnBlur, OnClick, OnKeyDownPreventDefault, OnKeyUpPreventDefault, OnMount, OnPointerDown, Style, Tabindex, Type, keyed, } = html();
240
+ const h = html();
229
241
  const { model: { id, isOpen, contentFocus, animation: { transitionState }, maybeLastButtonPointerType, }, toParentMessage, onOpened, onClosed, anchor, buttonContent, buttonClassName, buttonAttributes = [], panelContent, panelClassName, panelAttributes = [], backdropClassName, backdropAttributes = [], isDisabled, focusSelector, className, attributes = [], } = config;
230
242
  const dispatchOpened = () => onOpened ? onOpened() : toParentMessage(Opened());
231
243
  const dispatchClosed = () => onClosed ? onClosed() : toParentMessage(Closed());
232
244
  const isLeaving = transitionState === 'LeaveStart' || transitionState === 'LeaveAnimating';
233
245
  const isVisible = isOpen || isLeaving;
234
246
  const animationAttributes = M.value(transitionState).pipe(M.when('EnterStart', () => [
235
- DataAttribute('closed', ''),
236
- DataAttribute('enter', ''),
237
- DataAttribute('transition', ''),
247
+ h.DataAttribute('closed', ''),
248
+ h.DataAttribute('enter', ''),
249
+ h.DataAttribute('transition', ''),
238
250
  ]), M.when('EnterAnimating', () => [
239
- DataAttribute('enter', ''),
240
- DataAttribute('transition', ''),
251
+ h.DataAttribute('enter', ''),
252
+ h.DataAttribute('transition', ''),
241
253
  ]), M.when('LeaveStart', () => [
242
- DataAttribute('leave', ''),
243
- DataAttribute('transition', ''),
254
+ h.DataAttribute('leave', ''),
255
+ h.DataAttribute('transition', ''),
244
256
  ]), M.when('LeaveAnimating', () => [
245
- DataAttribute('closed', ''),
246
- DataAttribute('leave', ''),
247
- DataAttribute('transition', ''),
257
+ h.DataAttribute('closed', ''),
258
+ h.DataAttribute('leave', ''),
259
+ h.DataAttribute('transition', ''),
248
260
  ]), M.orElse(() => []));
249
261
  const handleButtonKeyDown = (key) => M.value(key).pipe(M.whenOr('Enter', ' ', 'ArrowDown', () => Option.some(isOpen ? dispatchClosed() : dispatchOpened())), M.when('Escape', () => OptionExt.when(isOpen, dispatchClosed())), M.orElse(() => Option.none()));
250
262
  const handleButtonPointerDown = (pointerType, button) => Option.some(toParentMessage(PressedPointerOnButton({
@@ -266,74 +278,71 @@ export const view = (config) => {
266
278
  const handleSpaceKeyUp = (key) => OptionExt.when(key === ' ', toParentMessage(SuppressedSpaceScroll()));
267
279
  const handlePanelKeyDown = (key) => M.value(key).pipe(M.when('Escape', () => Option.some(dispatchClosed())), M.orElse(() => Option.none()));
268
280
  const resolvedButtonAttributes = [
269
- Id(`${id}-button`),
270
- Type('button'),
271
- AriaExpanded(isVisible),
272
- AriaControls(`${id}-panel`),
281
+ h.Id(`${id}-button`),
282
+ h.Type('button'),
283
+ h.AriaExpanded(isVisible),
284
+ h.AriaControls(`${id}-panel`),
273
285
  ...(isDisabled
274
- ? [AriaDisabled(true), DataAttribute('disabled', '')]
286
+ ? [h.AriaDisabled(true), h.DataAttribute('disabled', '')]
275
287
  : [
276
- OnPointerDown(handleButtonPointerDown),
277
- OnKeyDownPreventDefault(handleButtonKeyDown),
278
- OnKeyUpPreventDefault(handleSpaceKeyUp),
279
- OnClick(handleButtonClick()),
288
+ h.OnPointerDown(handleButtonPointerDown),
289
+ h.OnKeyDownPreventDefault(handleButtonKeyDown),
290
+ h.OnKeyUpPreventDefault(handleSpaceKeyUp),
291
+ h.OnClick(handleButtonClick()),
280
292
  ]),
281
293
  ...(isVisible
282
294
  ? [
283
- DataAttribute('open', ''),
284
- Style({ position: 'relative', zIndex: '1' }),
295
+ h.DataAttribute('open', ''),
296
+ h.Style({ position: 'relative', zIndex: '1' }),
285
297
  ]
286
298
  : []),
287
- ...(buttonClassName ? [Class(buttonClassName)] : []),
299
+ ...(buttonClassName ? [h.Class(buttonClassName)] : []),
288
300
  ...buttonAttributes,
289
301
  ];
290
- const anchorPopover = Mount.mapMessage(AnchorPopover((items) => Effect.sync(() => {
291
- const cleanup = anchorSetup({
292
- buttonId: `${id}-button`,
293
- anchor,
294
- interceptTab: false,
295
- focusAfterPosition: true,
296
- ...(focusSelector !== undefined && { focusSelector }),
297
- })(items);
298
- return { message: CompletedAnchorPopover(), cleanup };
299
- })), toParentMessage);
302
+ const anchorPopover = Mount.mapMessage(AnchorPopover({
303
+ buttonId: `${id}-button`,
304
+ anchor,
305
+ ...(focusSelector !== undefined && { focusSelector }),
306
+ }), toParentMessage);
300
307
  const anchorAttributes = [
301
- Style({ position: 'absolute', margin: '0', visibility: 'hidden' }),
302
- OnMount(anchorPopover),
308
+ h.Style({ position: 'absolute', margin: '0', visibility: 'hidden' }),
309
+ h.OnMount(anchorPopover),
303
310
  ];
304
311
  const resolvedPanelAttributes = [
305
- Id(`${id}-panel`),
306
- ...(contentFocus ? [] : [Tabindex(0)]),
312
+ h.Id(`${id}-panel`),
313
+ ...(contentFocus ? [] : [h.Tabindex(0)]),
307
314
  ...anchorAttributes,
308
315
  ...animationAttributes,
309
316
  ...(isLeaving
310
317
  ? []
311
318
  : [
312
- OnKeyDownPreventDefault(handlePanelKeyDown),
313
- ...(contentFocus ? [] : [OnBlur(toParentMessage(BlurredPanel()))]),
319
+ h.OnKeyDownPreventDefault(handlePanelKeyDown),
320
+ ...(contentFocus ? [] : [h.OnBlur(toParentMessage(BlurredPanel()))]),
314
321
  ]),
315
- ...(panelClassName ? [Class(panelClassName)] : []),
322
+ ...(panelClassName ? [h.Class(panelClassName)] : []),
316
323
  ...panelAttributes,
317
324
  ];
318
- const backdrop = keyed('div')(`${id}-backdrop`, [
319
- OnMount(Mount.mapMessage(portalPopoverBackdrop, toParentMessage)),
320
- ...(isLeaving ? [] : [OnClick(dispatchClosed())]),
321
- ...(backdropClassName ? [Class(backdropClassName)] : []),
325
+ const backdrop = h.keyed('div')(`${id}-backdrop`, [
326
+ h.OnMount(Mount.mapMessage(PortalPopoverBackdrop(), toParentMessage)),
327
+ ...(isLeaving ? [] : [h.OnClick(dispatchClosed())]),
328
+ ...(backdropClassName ? [h.Class(backdropClassName)] : []),
322
329
  ...backdropAttributes,
323
330
  ], []);
324
331
  const visibleContent = [
325
332
  backdrop,
326
- keyed('div')(`${id}-panel-container`, resolvedPanelAttributes, [
333
+ h.keyed('div')(`${id}-panel-container`, resolvedPanelAttributes, [
327
334
  panelContent,
328
335
  ]),
329
336
  ];
330
337
  const wrapperAttributes = [
331
- ...(className ? [Class(className)] : []),
338
+ ...(className ? [h.Class(className)] : []),
332
339
  ...attributes,
333
- ...(isVisible ? [DataAttribute('open', '')] : []),
340
+ ...(isVisible ? [h.DataAttribute('open', '')] : []),
334
341
  ];
335
- return div(wrapperAttributes, [
336
- keyed('button')(`${id}-button`, resolvedButtonAttributes, [buttonContent]),
342
+ return h.div(wrapperAttributes, [
343
+ h.keyed('button')(`${id}-button`, resolvedButtonAttributes, [
344
+ buttonContent,
345
+ ]),
337
346
  ...(isVisible ? visibleContent : []),
338
347
  ]);
339
348
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/radioGroup/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/radioGroup/index.ts"],"names":[],"mappings":"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"}
@@ -52,7 +52,7 @@ const labelId = (id, index) => `${id}-option-${index}-label`;
52
52
  const descriptionId = (id, index) => `${id}-option-${index}-description`;
53
53
  /** Renders an accessible radio group by building ARIA attribute groups and delegating layout to the consumer's `optionToConfig` callback. */
54
54
  export const view = (config) => {
55
- const { div, input, AriaChecked, AriaDescribedBy, AriaDisabled, AriaLabel, AriaLabelledBy, AriaOrientation, Class, DataAttribute, Id, Name, OnClick, OnKeyDownPreventDefault, Role, Tabindex, Type, Value, } = html();
55
+ const h = html();
56
56
  const { model, model: { id, selectedValue }, toParentMessage, onSelected, options, optionToConfig, isOptionDisabled: isOptionDisabledFn, orientation = model.orientation, ariaLabel, className, attributes = [], name, isDisabled: isGroupDisabled = false, } = config;
57
57
  const dispatchSelected = (value, index) => onSelected
58
58
  ? onSelected(value, index)
@@ -98,33 +98,33 @@ export const view = (config) => {
98
98
  isActive: isFocusable,
99
99
  isDisabled: isOptionDisabled,
100
100
  });
101
- const checkedAttributes = isSelected ? [DataAttribute('checked', '')] : [];
102
- const activeAttributes = isFocusable ? [DataAttribute('active', '')] : [];
101
+ const checkedAttributes = isSelected ? [h.DataAttribute('checked', '')] : [];
102
+ const activeAttributes = isFocusable ? [h.DataAttribute('active', '')] : [];
103
103
  const disabledAttributes = isOptionDisabled
104
- ? [AriaDisabled(true), DataAttribute('disabled', '')]
104
+ ? [h.AriaDisabled(true), h.DataAttribute('disabled', '')]
105
105
  : [];
106
106
  const optionAttributes = [
107
- Id(optionId(id, index)),
108
- Role('radio'),
109
- AriaChecked(isSelected),
110
- AriaLabelledBy(labelId(id, index)),
111
- AriaDescribedBy(descriptionId(id, index)),
112
- Tabindex(isFocusable ? 0 : -1),
107
+ h.Id(optionId(id, index)),
108
+ h.Role('radio'),
109
+ h.AriaChecked(isSelected),
110
+ h.AriaLabelledBy(labelId(id, index)),
111
+ h.AriaDescribedBy(descriptionId(id, index)),
112
+ h.Tabindex(isFocusable ? 0 : -1),
113
113
  ...checkedAttributes,
114
114
  ...activeAttributes,
115
115
  ...disabledAttributes,
116
116
  ...(isOptionDisabled
117
117
  ? []
118
118
  : [
119
- OnClick(dispatchSelected(optionConfig.value, index)),
120
- OnKeyDownPreventDefault(handleKeyDown(index)),
119
+ h.OnClick(dispatchSelected(optionConfig.value, index)),
120
+ h.OnKeyDownPreventDefault(handleKeyDown(index)),
121
121
  ]),
122
122
  ];
123
123
  const labelAttributes = [
124
- Id(labelId(id, index)),
124
+ h.Id(labelId(id, index)),
125
125
  ];
126
126
  const descriptionAttributes = [
127
- Id(descriptionId(id, index)),
127
+ h.Id(descriptionId(id, index)),
128
128
  ];
129
129
  return optionConfig.content({
130
130
  option: optionAttributes,
@@ -132,18 +132,18 @@ export const view = (config) => {
132
132
  description: descriptionAttributes,
133
133
  });
134
134
  });
135
- const hiddenInputs = pipe(name, Option.fromNullishOr, Option.flatMap(inputName => pipe(selectedValue, Option.map(value => input([Type('hidden'), Name(inputName), Value(value)])))), Option.match({
135
+ const hiddenInputs = pipe(name, Option.fromNullishOr, Option.flatMap(inputName => pipe(selectedValue, Option.map(value => h.input([h.Type('hidden'), h.Name(inputName), h.Value(value)])))), Option.match({
136
136
  onNone: () => [],
137
137
  onSome: hiddenInput => [hiddenInput],
138
138
  }));
139
139
  const groupAttributes = [
140
- Role('radiogroup'),
141
- AriaOrientation(String.toLowerCase(orientation)),
142
- AriaLabel(ariaLabel),
143
- ...(className ? [Class(className)] : []),
140
+ h.Role('radiogroup'),
141
+ h.AriaOrientation(String.toLowerCase(orientation)),
142
+ h.AriaLabel(ariaLabel),
143
+ ...(className ? [h.Class(className)] : []),
144
144
  ...attributes,
145
145
  ];
146
- return div(groupAttributes, [...renderedOptions, ...hiddenInputs]);
146
+ return h.div(groupAttributes, [...renderedOptions, ...hiddenInputs]);
147
147
  };
148
148
  /** Creates a memoized radio group view. Static config is captured in a closure;
149
149
  * only `model` and `toParentMessage` are compared per render via `createLazy`. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/select/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAI/C,0FAA0F;AAC1F,MAAM,MAAM,gBAAgB,CAAC,aAAa,IAAI,QAAQ,CAAC;IACrD,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;IAC/C,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;IAC9C,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;CACrD,CAAC,CAAA;AAEF,wDAAwD;AACxD,MAAM,MAAM,UAAU,CAAC,aAAa,IAAI,QAAQ,CAAC;IAC/C,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;IAC7D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,aAAa,CAAA;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAC,CAAA;AAEF,sEAAsE;AACtE,eAAO,MAAM,aAAa,GAAI,IAAI,MAAM,KAAG,MAA6B,CAAA;AAExE,gIAAgI;AAChI,eAAO,MAAM,IAAI,GAAI,aAAa,EAChC,QAAQ,UAAU,CAAC,aAAa,CAAC,KAChC,IAiEF,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/select/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAI/C,0FAA0F;AAC1F,MAAM,MAAM,gBAAgB,CAAC,aAAa,IAAI,QAAQ,CAAC;IACrD,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;IAC/C,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;IAC9C,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAA;CACrD,CAAC,CAAA;AAEF,wDAAwD;AACxD,MAAM,MAAM,UAAU,CAAC,aAAa,IAAI,QAAQ,CAAC;IAC/C,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;IAC7D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,aAAa,CAAA;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAC,CAAA;AAEF,sEAAsE;AACtE,eAAO,MAAM,aAAa,GAAI,IAAI,MAAM,KAAG,MAA6B,CAAA;AAExE,gIAAgI;AAChI,eAAO,MAAM,IAAI,GAAI,aAAa,EAChC,QAAQ,UAAU,CAAC,aAAa,CAAC,KAChC,IAuDF,CAAA"}