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 { 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 { makeConstrainedEvo } 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 → combobox → animation.
12
12
  // The barrel (../animation) imports from html, which starts the cycle.
@@ -330,21 +330,31 @@ export const makeUpdate = (handlers) => {
330
330
  /** The anchor-positioning Mount this Combobox renders when an anchor is
331
331
  * configured. Exposed so Scene tests can call
332
332
  * `Scene.Mount.resolve(AnchorCombobox, CompletedAnchorCombobox())`. */
333
- export const AnchorCombobox = Mount.define('AnchorCombobox', CompletedAnchorCombobox);
333
+ export const AnchorCombobox = Mount.define('AnchorCombobox', { buttonId: S.String, anchor: AnchorConfig }, CompletedAnchorCombobox)(({ buttonId, anchor }) => (element) => Effect.sync(() => {
334
+ const preventBlur = (event) => {
335
+ event.preventDefault();
336
+ };
337
+ element.addEventListener('pointerdown', preventBlur, { capture: true });
338
+ const teardownAnchor = anchorSetup({
339
+ buttonId,
340
+ anchor,
341
+ interceptTab: false,
342
+ })(element);
343
+ return {
344
+ message: CompletedAnchorCombobox(),
345
+ cleanup: () => {
346
+ element.removeEventListener('pointerdown', preventBlur, {
347
+ capture: true,
348
+ });
349
+ teardownAnchor();
350
+ },
351
+ };
352
+ }));
334
353
  /** The Mount this Combobox renders to install a `pointerdown`-cancelling
335
354
  * capture listener that prevents blur on item presses. Exposed so Scene
336
355
  * tests can call
337
356
  * `Scene.Mount.resolve(AttachComboboxPreventBlur, CompletedAttachComboboxPreventBlur())`. */
338
- export const AttachComboboxPreventBlur = Mount.define('AttachComboboxPreventBlur', CompletedAttachComboboxPreventBlur);
339
- /** The Mount this Combobox renders to install the input's select-on-focus
340
- * behavior. Exposed so Scene tests can call
341
- * `Scene.Mount.resolve(AttachComboboxSelectOnFocus, CompletedAttachComboboxSelectOnFocus())`. */
342
- export const AttachComboboxSelectOnFocus = Mount.define('AttachComboboxSelectOnFocus', CompletedAttachComboboxSelectOnFocus);
343
- /** The backdrop-portaling Mount this Combobox renders. Exposed so Scene tests can
344
- * call `Scene.Mount.resolve(PortalComboboxBackdrop, CompletedPortalComboboxBackdrop())` to
345
- * acknowledge the mount produced by the rendered backdrop. */
346
- export const PortalComboboxBackdrop = Mount.define('PortalComboboxBackdrop', CompletedPortalComboboxBackdrop);
347
- const attachComboboxPreventBlur = AttachComboboxPreventBlur((element) => Effect.sync(() => {
357
+ export const AttachComboboxPreventBlur = Mount.define('AttachComboboxPreventBlur', CompletedAttachComboboxPreventBlur)((element) => Effect.sync(() => {
348
358
  const handler = (event) => {
349
359
  event.preventDefault();
350
360
  };
@@ -356,7 +366,10 @@ const attachComboboxPreventBlur = AttachComboboxPreventBlur((element) => Effect.
356
366
  }),
357
367
  };
358
368
  }));
359
- const attachComboboxSelectOnFocus = AttachComboboxSelectOnFocus((element) => Effect.sync(() => {
369
+ /** The Mount this Combobox renders to install the input's select-on-focus
370
+ * behavior. Exposed so Scene tests can call
371
+ * `Scene.Mount.resolve(AttachComboboxSelectOnFocus, CompletedAttachComboboxSelectOnFocus())`. */
372
+ export const AttachComboboxSelectOnFocus = Mount.define('AttachComboboxSelectOnFocus', CompletedAttachComboboxSelectOnFocus)((element) => Effect.sync(() => {
360
373
  const handler = () => {
361
374
  if (element instanceof HTMLInputElement) {
362
375
  element.select();
@@ -368,13 +381,16 @@ const attachComboboxSelectOnFocus = AttachComboboxSelectOnFocus((element) => Eff
368
381
  cleanup: () => element.removeEventListener('focus', handler),
369
382
  };
370
383
  }));
371
- const portalComboboxBackdrop = PortalComboboxBackdrop((element) => Effect.sync(() => {
384
+ /** The backdrop-portaling Mount this Combobox renders. Exposed so Scene tests can
385
+ * call `Scene.Mount.resolve(PortalComboboxBackdrop, CompletedPortalComboboxBackdrop())` to
386
+ * acknowledge the mount produced by the rendered backdrop. */
387
+ export const PortalComboboxBackdrop = Mount.define('PortalComboboxBackdrop', CompletedPortalComboboxBackdrop)((element) => Effect.sync(() => {
372
388
  const cleanup = portalToBody(element);
373
389
  return { message: CompletedPortalComboboxBackdrop(), cleanup };
374
390
  }));
375
391
  /** Creates a combobox view function from variant-specific behavior. Shared rendering logic (input, items, transitions, keyboard navigation) is handled internally; only selection display varies by variant. */
376
392
  export const makeView = (behavior) => (config) => {
377
- const { div, input, AriaActiveDescendant, AriaControls, AriaDisabled, AriaExpanded, AriaInvalid, AriaLabelledBy, AriaMultiSelectable, AriaSelected, Attribute, Autocomplete, Class, DataAttribute, Id, Name, OnBlur, OnClick, OnFocus, OnInput, OnKeyDownPreventDefault, OnMount, OnPointerLeave, OnPointerMove, Placeholder, Role, Style, Tabindex, Type, Value, keyed, } = html();
393
+ const h = html();
378
394
  const { model: { id, isOpen, immediate, animation: { transitionState }, maybeActiveItemIndex, }, toParentMessage, onSelectedItem, items, itemToConfig, itemToValue, itemToDisplayText, isItemDisabled, inputClassName, inputAttributes = [], inputPlaceholder, inputWrapperClassName, inputWrapperAttributes = [], itemsClassName, itemsAttributes = [], itemsScrollClassName, itemsScrollAttributes = [], backdropClassName, backdropAttributes = [], className, attributes = [], buttonContent, buttonClassName, buttonAttributes = [], formName, isDisabled, isInvalid, openOnFocus, itemGroupKey, groupToHeading, groupClassName, groupAttributes = [], separatorClassName, separatorAttributes = [], anchor, } = config;
379
395
  const dispatchSelectedItem = (item, index) => onSelectedItem
380
396
  ? onSelectedItem(itemToValue(item, index))
@@ -385,19 +401,19 @@ export const makeView = (behavior) => (config) => {
385
401
  const isLeaving = transitionState === 'LeaveStart' || transitionState === 'LeaveAnimating';
386
402
  const isVisible = isOpen || isLeaving;
387
403
  const animationAttributes = M.value(transitionState).pipe(M.when('EnterStart', () => [
388
- DataAttribute('closed', ''),
389
- DataAttribute('enter', ''),
390
- DataAttribute('transition', ''),
404
+ h.DataAttribute('closed', ''),
405
+ h.DataAttribute('enter', ''),
406
+ h.DataAttribute('transition', ''),
391
407
  ]), M.when('EnterAnimating', () => [
392
- DataAttribute('enter', ''),
393
- DataAttribute('transition', ''),
408
+ h.DataAttribute('enter', ''),
409
+ h.DataAttribute('transition', ''),
394
410
  ]), M.when('LeaveStart', () => [
395
- DataAttribute('leave', ''),
396
- DataAttribute('transition', ''),
411
+ h.DataAttribute('leave', ''),
412
+ h.DataAttribute('transition', ''),
397
413
  ]), M.when('LeaveAnimating', () => [
398
- DataAttribute('closed', ''),
399
- DataAttribute('leave', ''),
400
- DataAttribute('transition', ''),
414
+ h.DataAttribute('closed', ''),
415
+ h.DataAttribute('leave', ''),
416
+ h.DataAttribute('transition', ''),
401
417
  ]), M.orElse(() => []));
402
418
  const isDisabledAtIndex = (index) => Predicate.isNotUndefined(isItemDisabled) &&
403
419
  pipe(items, Array.get(index), Option.exists(item => isItemDisabled(item, index)));
@@ -458,77 +474,63 @@ export const makeView = (behavior) => (config) => {
458
474
  }), M.orElse(() => Option.none()));
459
475
  const maybeActiveDescendant = Option.match(maybeActiveItemIndex, {
460
476
  onNone: () => [],
461
- onSome: index => [AriaActiveDescendant(itemId(id, index))],
477
+ onSome: index => [h.AriaActiveDescendant(itemId(id, index))],
462
478
  });
463
479
  const resolvedInputAttributes = [
464
- Id(`${id}-input`),
465
- Role('combobox'),
466
- AriaExpanded(isVisible),
467
- AriaControls(`${id}-items`),
468
- Attribute('aria-autocomplete', 'list'),
469
- Attribute('aria-haspopup', 'listbox'),
470
- Autocomplete('off'),
471
- Value(config.model.inputValue),
480
+ h.Id(`${id}-input`),
481
+ h.Role('combobox'),
482
+ h.AriaExpanded(isVisible),
483
+ h.AriaControls(`${id}-items`),
484
+ h.Attribute('aria-autocomplete', 'list'),
485
+ h.Attribute('aria-haspopup', 'listbox'),
486
+ h.Autocomplete('off'),
487
+ h.Value(config.model.inputValue),
472
488
  ...maybeActiveDescendant,
473
- ...(inputPlaceholder ? [Placeholder(inputPlaceholder)] : []),
489
+ ...(inputPlaceholder ? [h.Placeholder(inputPlaceholder)] : []),
474
490
  ...(isDisabled
475
- ? [AriaDisabled(true), DataAttribute('disabled', '')]
491
+ ? [h.AriaDisabled(true), h.DataAttribute('disabled', '')]
476
492
  : [
477
- OnInput(value => toParentMessage(UpdatedInputValue({ value }))),
478
- OnKeyDownPreventDefault(handleInputKeyDown),
479
- OnBlur(toParentMessage(BlurredInput())),
493
+ h.OnInput(value => toParentMessage(UpdatedInputValue({ value }))),
494
+ h.OnKeyDownPreventDefault(handleInputKeyDown),
495
+ h.OnBlur(toParentMessage(BlurredInput())),
480
496
  ...(openOnFocus
481
497
  ? [
482
- OnFocus(toParentMessage(Opened({ maybeActiveItemIndex: Option.none() }))),
498
+ h.OnFocus(toParentMessage(Opened({ maybeActiveItemIndex: Option.none() }))),
483
499
  ]
484
500
  : []),
485
501
  ]),
486
- ...(isInvalid ? [AriaInvalid(true), DataAttribute('invalid', '')] : []),
487
- ...(isVisible ? [DataAttribute('open', '')] : []),
502
+ ...(isInvalid
503
+ ? [h.AriaInvalid(true), h.DataAttribute('invalid', '')]
504
+ : []),
505
+ ...(isVisible ? [h.DataAttribute('open', '')] : []),
488
506
  ...(config.model.selectInputOnFocus
489
507
  ? [
490
- OnMount(Mount.mapMessage(attachComboboxSelectOnFocus, toParentMessage)),
508
+ h.OnMount(Mount.mapMessage(AttachComboboxSelectOnFocus(), toParentMessage)),
491
509
  ]
492
510
  : []),
493
- ...(inputClassName ? [Class(inputClassName)] : []),
511
+ ...(inputClassName ? [h.Class(inputClassName)] : []),
494
512
  ...inputAttributes,
495
513
  ];
496
514
  const anchorAttributes = anchor
497
515
  ? [
498
- Style({ position: 'absolute', margin: '0', visibility: 'hidden' }),
499
- OnMount(Mount.mapMessage(AnchorCombobox((items) => Effect.sync(() => {
500
- const preventBlur = (event) => {
501
- event.preventDefault();
502
- };
503
- items.addEventListener('pointerdown', preventBlur, {
504
- capture: true,
505
- });
506
- const teardownAnchor = anchorSetup({
507
- buttonId: `${id}-input-wrapper`,
508
- anchor,
509
- interceptTab: false,
510
- })(items);
511
- return {
512
- message: CompletedAnchorCombobox(),
513
- cleanup: () => {
514
- items.removeEventListener('pointerdown', preventBlur, {
515
- capture: true,
516
- });
517
- teardownAnchor();
518
- },
519
- };
520
- })), toParentMessage)),
516
+ h.Style({ position: 'absolute', margin: '0', visibility: 'hidden' }),
517
+ h.OnMount(Mount.mapMessage(AnchorCombobox({
518
+ buttonId: `${id}-input-wrapper`,
519
+ anchor,
520
+ }), toParentMessage)),
521
521
  ]
522
- : [OnMount(Mount.mapMessage(attachComboboxPreventBlur, toParentMessage))];
522
+ : [
523
+ h.OnMount(Mount.mapMessage(AttachComboboxPreventBlur(), toParentMessage)),
524
+ ];
523
525
  const itemsContainerAttributes = [
524
- Id(`${id}-items`),
525
- Role('listbox'),
526
- ...(behavior.ariaMultiSelectable ? [AriaMultiSelectable(true)] : []),
527
- AriaLabelledBy(`${id}-input`),
528
- Tabindex(-1),
526
+ h.Id(`${id}-items`),
527
+ h.Role('listbox'),
528
+ ...(behavior.ariaMultiSelectable ? [h.AriaMultiSelectable(true)] : []),
529
+ h.AriaLabelledBy(`${id}-input`),
530
+ h.Tabindex(-1),
529
531
  ...anchorAttributes,
530
532
  ...animationAttributes,
531
- ...(itemsClassName ? [Class(itemsClassName)] : []),
533
+ ...(itemsClassName ? [h.Class(itemsClassName)] : []),
532
534
  ...itemsAttributes,
533
535
  ];
534
536
  const comboboxItems = Array.map(items, (item, index) => {
@@ -541,27 +543,27 @@ export const makeView = (behavior) => (config) => {
541
543
  isSelected: isSelectedItem,
542
544
  });
543
545
  const isInteractive = !isDisabledItem && !isLeaving;
544
- return keyed('div')(itemId(id, index), [
545
- Id(itemId(id, index)),
546
- Role('option'),
547
- AriaSelected(isSelectedItem),
548
- ...(isActiveItem ? [DataAttribute('active', '')] : []),
549
- ...(isSelectedItem ? [DataAttribute('selected', '')] : []),
546
+ return h.keyed('div')(itemId(id, index), [
547
+ h.Id(itemId(id, index)),
548
+ h.Role('option'),
549
+ h.AriaSelected(isSelectedItem),
550
+ ...(isActiveItem ? [h.DataAttribute('active', '')] : []),
551
+ ...(isSelectedItem ? [h.DataAttribute('selected', '')] : []),
550
552
  ...(isDisabledItem
551
- ? [AriaDisabled(true), DataAttribute('disabled', '')]
553
+ ? [h.AriaDisabled(true), h.DataAttribute('disabled', '')]
552
554
  : []),
553
555
  ...(isInteractive
554
556
  ? [
555
- OnClick(dispatchSelectedItem(item, index)),
557
+ h.OnClick(dispatchSelectedItem(item, index)),
556
558
  ...(isActiveItem
557
559
  ? []
558
560
  : [
559
- OnPointerMove((screenX, screenY, pointerType) => OptionExt.when(pointerType !== 'touch', toParentMessage(MovedPointerOverItem({ index, screenX, screenY })))),
561
+ h.OnPointerMove((screenX, screenY, pointerType) => OptionExt.when(pointerType !== 'touch', toParentMessage(MovedPointerOverItem({ index, screenX, screenY })))),
560
562
  ]),
561
- OnPointerLeave(pointerType => OptionExt.when(pointerType !== 'touch', toParentMessage(DeactivatedItem()))),
563
+ h.OnPointerLeave(pointerType => OptionExt.when(pointerType !== 'touch', toParentMessage(DeactivatedItem()))),
562
564
  ]
563
565
  : []),
564
- ...(itemConfig.className ? [Class(itemConfig.className)] : []),
566
+ ...(itemConfig.className ? [h.Class(itemConfig.className)] : []),
565
567
  ], [itemConfig.content]);
566
568
  });
567
569
  const renderGroupedItems = () => {
@@ -578,27 +580,31 @@ export const makeView = (behavior) => (config) => {
578
580
  const headingElement = Option.match(maybeHeading, {
579
581
  onNone: () => [],
580
582
  onSome: heading => [
581
- keyed('div')(headingId, [
582
- Id(headingId),
583
- Role('presentation'),
584
- ...(heading.className ? [Class(heading.className)] : []),
583
+ h.keyed('div')(headingId, [
584
+ h.Id(headingId),
585
+ h.Role('presentation'),
586
+ ...(heading.className ? [h.Class(heading.className)] : []),
585
587
  ], [heading.content]),
586
588
  ],
587
589
  });
588
590
  const groupContent = [...headingElement, ...segment.items];
589
- const groupElement = keyed('div')(`${id}-group-${segment.key}`, [
590
- Role('group'),
591
- ...(Option.isSome(maybeHeading) ? [AriaLabelledBy(headingId)] : []),
592
- ...(groupClassName ? [Class(groupClassName)] : []),
591
+ const groupElement = h.keyed('div')(`${id}-group-${segment.key}`, [
592
+ h.Role('group'),
593
+ ...(Option.isSome(maybeHeading)
594
+ ? [h.AriaLabelledBy(headingId)]
595
+ : []),
596
+ ...(groupClassName ? [h.Class(groupClassName)] : []),
593
597
  ...groupAttributes,
594
598
  ], groupContent);
595
599
  const separator = segmentIndex > 0 &&
596
600
  (separatorClassName ||
597
601
  Array.isReadonlyArrayNonEmpty(separatorAttributes))
598
602
  ? [
599
- keyed('div')(`${id}-separator-${segmentIndex}`, [
600
- Role('separator'),
601
- ...(separatorClassName ? [Class(separatorClassName)] : []),
603
+ h.keyed('div')(`${id}-separator-${segmentIndex}`, [
604
+ h.Role('separator'),
605
+ ...(separatorClassName
606
+ ? [h.Class(separatorClassName)]
607
+ : []),
602
608
  ...separatorAttributes,
603
609
  ], []),
604
610
  ]
@@ -606,45 +612,47 @@ export const makeView = (behavior) => (config) => {
606
612
  return [...separator, groupElement];
607
613
  });
608
614
  };
609
- const backdrop = keyed('div')(`${id}-backdrop`, [
610
- OnMount(Mount.mapMessage(portalComboboxBackdrop, toParentMessage)),
611
- ...(isLeaving ? [] : [OnClick(toParentMessage(Closed()))]),
612
- ...(backdropClassName ? [Class(backdropClassName)] : []),
615
+ const backdrop = h.keyed('div')(`${id}-backdrop`, [
616
+ h.OnMount(Mount.mapMessage(PortalComboboxBackdrop(), toParentMessage)),
617
+ ...(isLeaving ? [] : [h.OnClick(toParentMessage(Closed()))]),
618
+ ...(backdropClassName ? [h.Class(backdropClassName)] : []),
613
619
  ...backdropAttributes,
614
620
  ], []);
615
621
  const renderedItems = renderGroupedItems();
616
622
  const scrollableItems = itemsScrollClassName ||
617
623
  Array.isReadonlyArrayNonEmpty(itemsScrollAttributes)
618
624
  ? [
619
- div([
620
- ...(itemsScrollClassName ? [Class(itemsScrollClassName)] : []),
625
+ h.div([
626
+ ...(itemsScrollClassName
627
+ ? [h.Class(itemsScrollClassName)]
628
+ : []),
621
629
  ...itemsScrollAttributes,
622
630
  ], renderedItems),
623
631
  ]
624
632
  : renderedItems;
625
633
  const visibleContent = [
626
634
  backdrop,
627
- keyed('div')(`${id}-items-container`, itemsContainerAttributes, scrollableItems),
635
+ h.keyed('div')(`${id}-items-container`, itemsContainerAttributes, scrollableItems),
628
636
  ];
629
637
  const resolvedInputWrapperAttributes = [
630
- Id(`${id}-input-wrapper`),
631
- ...(inputWrapperClassName ? [Class(inputWrapperClassName)] : []),
638
+ h.Id(`${id}-input-wrapper`),
639
+ ...(inputWrapperClassName ? [h.Class(inputWrapperClassName)] : []),
632
640
  ...inputWrapperAttributes,
633
641
  ];
634
642
  const toggleButton = buttonContent
635
643
  ? [
636
- keyed('button')(`${id}-button`, [
637
- Id(`${id}-button`),
638
- Type('button'),
639
- Tabindex(-1),
640
- AriaControls(`${id}-items`),
641
- AriaExpanded(isVisible),
642
- Attribute('aria-haspopup', 'listbox'),
644
+ h.keyed('button')(`${id}-button`, [
645
+ h.Id(`${id}-button`),
646
+ h.Type('button'),
647
+ h.Tabindex(-1),
648
+ h.AriaControls(`${id}-items`),
649
+ h.AriaExpanded(isVisible),
650
+ h.Attribute('aria-haspopup', 'listbox'),
643
651
  ...(isDisabled
644
- ? [AriaDisabled(true), DataAttribute('disabled', '')]
645
- : [OnClick(toParentMessage(PressedToggleButton()))]),
646
- OnMount(Mount.mapMessage(attachComboboxPreventBlur, toParentMessage)),
647
- ...(buttonClassName ? [Class(buttonClassName)] : []),
652
+ ? [h.AriaDisabled(true), h.DataAttribute('disabled', '')]
653
+ : [h.OnClick(toParentMessage(PressedToggleButton()))]),
654
+ h.OnMount(Mount.mapMessage(AttachComboboxPreventBlur(), toParentMessage)),
655
+ ...(buttonClassName ? [h.Class(buttonClassName)] : []),
648
656
  ...buttonAttributes,
649
657
  ], [buttonContent]),
650
658
  ]
@@ -655,20 +663,24 @@ export const makeView = (behavior) => (config) => {
655
663
  }));
656
664
  const hiddenInputs = formName
657
665
  ? Array.match(selectedValues, {
658
- onEmpty: () => [input([Type('hidden'), Name(formName)])],
659
- onNonEmpty: Array.map(selectedValue => input([Type('hidden'), Name(formName), Value(selectedValue)])),
666
+ onEmpty: () => [h.input([h.Type('hidden'), h.Name(formName)])],
667
+ onNonEmpty: Array.map(selectedValue => h.input([
668
+ h.Type('hidden'),
669
+ h.Name(formName),
670
+ h.Value(selectedValue),
671
+ ])),
660
672
  })
661
673
  : [];
662
674
  const wrapperAttributes = [
663
- ...(className ? [Class(className)] : []),
675
+ ...(className ? [h.Class(className)] : []),
664
676
  ...attributes,
665
- ...(isVisible ? [DataAttribute('open', '')] : []),
666
- ...(isDisabled ? [DataAttribute('disabled', '')] : []),
667
- ...(isInvalid ? [DataAttribute('invalid', '')] : []),
677
+ ...(isVisible ? [h.DataAttribute('open', '')] : []),
678
+ ...(isDisabled ? [h.DataAttribute('disabled', '')] : []),
679
+ ...(isInvalid ? [h.DataAttribute('invalid', '')] : []),
668
680
  ];
669
- return div(wrapperAttributes, [
670
- div(resolvedInputWrapperAttributes, [
671
- input(resolvedInputAttributes),
681
+ return h.div(wrapperAttributes, [
682
+ h.div(resolvedInputWrapperAttributes, [
683
+ h.input(resolvedInputAttributes),
672
684
  ...toggleButton,
673
685
  ]),
674
686
  ...(isVisible && Array.isReadonlyArrayNonEmpty(items)
@@ -238,13 +238,7 @@ export declare const view: <ParentMessage, Item extends string>(config: Readonly
238
238
  groupAttributes?: readonly import("../../html/index.js").Attribute<ParentMessage>[];
239
239
  separatorClassName?: string;
240
240
  separatorAttributes?: readonly import("../../html/index.js").Attribute<ParentMessage>[];
241
- anchor?: Readonly<{
242
- placement?: import("@floating-ui/dom").Placement;
243
- gap?: number;
244
- offset?: number;
245
- padding?: number;
246
- portal?: boolean;
247
- }>;
241
+ anchor?: import("./public.js").AnchorConfig;
248
242
  }>) => Html;
249
243
  /** Creates a memoized single-select combobox view. Static config is captured in a closure;
250
244
  * only `model` and `toParentMessage` are compared per render via `createLazy`. */
@@ -1 +1 @@
1
- {"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../../src/ui/combobox/single.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,IAAI,CAAC,EAAQ,MAAM,QAAQ,CAAA;AAEzD,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,EAKb,MAAM,aAAa,CAAA;AAIpB,uJAAuJ;AACvJ,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;EAIhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,8RAA8R;AAC9R,MAAM,MAAM,UAAU,GAAG,cAAc,GACrC,QAAQ,CAAC;IACP,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAC,CAAA;AAEJ,4IAA4I;AAC5I,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAMxC,CAAA;AAIF,uIAAuI;AACvI,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiDjB,CAAA;AAEF;wFACwF;AACxF,eAAO,MAAM,IAAI,GACf,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACK,CAAA;AAEhE;yFACyF;AACzF,eAAO,MAAM,KAAK,GAChB,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAClC,CAAA;AAEzB;iGACiG;AACjG,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,MAAM,MAAM,EACZ,aAAa,MAAM,KAClB,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACP,CAAA;AAIpD,wEAAwE;AACxE,MAAM,MAAM,UAAU,CAAC,aAAa,EAAE,IAAI,SAAS,MAAM,IAAI,cAAc,CACzE,aAAa,EACb,IAAI,EACJ,KAAK,CACN,CAAA;AAED,0IAA0I;AAC1I,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAOf,CAAA;AAEF;mFACmF;AACnF,eAAO,MAAM,IAAI,GAAI,aAAa,EAAE,IAAI,SAAS,MAAM,EACrD,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"}
1
+ {"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../../src/ui/combobox/single.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,IAAI,CAAC,EAAQ,MAAM,QAAQ,CAAA;AAEzD,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,EAKb,MAAM,aAAa,CAAA;AAIpB,uJAAuJ;AACvJ,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;EAIhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,8RAA8R;AAC9R,MAAM,MAAM,UAAU,GAAG,cAAc,GACrC,QAAQ,CAAC;IACP,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAC,CAAA;AAEJ,4IAA4I;AAC5I,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAMxC,CAAA;AAIF,uIAAuI;AACvI,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiDjB,CAAA;AAEF;wFACwF;AACxF,eAAO,MAAM,IAAI,GACf,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACK,CAAA;AAEhE;yFACyF;AACzF,eAAO,MAAM,KAAK,GAChB,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAClC,CAAA;AAEzB;iGACiG;AACjG,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,MAAM,MAAM,EACZ,aAAa,MAAM,KAClB,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACP,CAAA;AAIpD,wEAAwE;AACxE,MAAM,MAAM,UAAU,CAAC,aAAa,EAAE,IAAI,SAAS,MAAM,IAAI,cAAc,CACzE,aAAa,EACb,IAAI,EACJ,KAAK,CACN,CAAA;AAED,0IAA0I;AAC1I,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAOf,CAAA;AAEF;mFACmF;AACnF,eAAO,MAAM,IAAI,GAAI,aAAa,EAAE,IAAI,SAAS,MAAM,EACrD,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"}
@@ -217,7 +217,7 @@ const encodeIsoDate = S.encodeSync(Calendar.CalendarDateFromIsoString);
217
217
  * provide the trigger face and the calendar grid layout, DatePicker handles
218
218
  * focus choreography, open/close state, and form submission. */
219
219
  export const view = (config) => {
220
- const { Class, Name, Type, Value, div, input } = html();
220
+ const h = html();
221
221
  const { model, toParentMessage, onSelectedDate, anchor, triggerContent, toCalendarView, isDisabled, name, className, attributes = [], triggerClassName, triggerAttributes = [], panelClassName, panelAttributes = [], backdropClassName, backdropAttributes = [], } = config;
222
222
  const dispatchSelectedDate = (date) => onSelectedDate !== undefined
223
223
  ? onSelectedDate(date)
@@ -252,13 +252,13 @@ export const view = (config) => {
252
252
  onSome: encodeIsoDate,
253
253
  });
254
254
  const maybeHiddenInput = name !== undefined
255
- ? [input([Type('hidden'), Name(name), Value(hiddenInputValue)])]
255
+ ? [h.input([h.Type('hidden'), h.Name(name), h.Value(hiddenInputValue)])]
256
256
  : [];
257
257
  const wrapperAttributes = [
258
- ...(className !== undefined ? [Class(className)] : []),
258
+ ...(className !== undefined ? [h.Class(className)] : []),
259
259
  ...attributes,
260
260
  ];
261
- return div(wrapperAttributes, [popoverVNode, ...maybeHiddenInput]);
261
+ return h.div(wrapperAttributes, [popoverVNode, ...maybeHiddenInput]);
262
262
  };
263
263
  /** Creates a memoized date picker view. Static config is captured in a closure;
264
264
  * only `model` and `toParentMessage` are compared per render via `createLazy`. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/dialog/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/dialog/index.ts"],"names":[],"mappings":"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"}
@@ -125,33 +125,33 @@ export const open = (model) => update(model, Opened());
125
125
  export const close = (model) => update(model, Closed());
126
126
  /** Renders a headless dialog component backed by the native `<dialog>` element with `showModal()`. */
127
127
  export const view = (config) => {
128
- const { AriaDescribedBy, AriaLabelledBy, Class, DataAttribute, Id, OnCancel, OnClick, Open, Style, keyed, } = html();
128
+ const h = html();
129
129
  const { model: { id, isOpen, animation: { transitionState }, }, toParentMessage, onClosed, panelContent, panelClassName, panelAttributes = [], backdropClassName, backdropAttributes = [], className, attributes = [], } = config;
130
130
  const dispatchClosed = () => onClosed ? onClosed() : toParentMessage(Closed());
131
131
  const isLeaving = transitionState === 'LeaveStart' || transitionState === 'LeaveAnimating';
132
132
  const isVisible = isOpen || isLeaving;
133
133
  const animationAttributes = M.value(transitionState).pipe(M.when('EnterStart', () => [
134
- DataAttribute('closed', ''),
135
- DataAttribute('enter', ''),
136
- DataAttribute('transition', ''),
134
+ h.DataAttribute('closed', ''),
135
+ h.DataAttribute('enter', ''),
136
+ h.DataAttribute('transition', ''),
137
137
  ]), M.when('EnterAnimating', () => [
138
- DataAttribute('enter', ''),
139
- DataAttribute('transition', ''),
138
+ h.DataAttribute('enter', ''),
139
+ h.DataAttribute('transition', ''),
140
140
  ]), M.when('LeaveStart', () => [
141
- DataAttribute('leave', ''),
142
- DataAttribute('transition', ''),
141
+ h.DataAttribute('leave', ''),
142
+ h.DataAttribute('transition', ''),
143
143
  ]), M.when('LeaveAnimating', () => [
144
- DataAttribute('closed', ''),
145
- DataAttribute('leave', ''),
146
- DataAttribute('transition', ''),
144
+ h.DataAttribute('closed', ''),
145
+ h.DataAttribute('leave', ''),
146
+ h.DataAttribute('transition', ''),
147
147
  ]), M.orElse(() => []));
148
148
  const dialogAttributes = [
149
- Id(id),
150
- AriaLabelledBy(`${id}-title`),
151
- AriaDescribedBy(`${id}-description`),
152
- OnCancel(dispatchClosed()),
153
- Open(isVisible),
154
- Style({
149
+ h.Id(id),
150
+ h.AriaLabelledBy(`${id}-title`),
151
+ h.AriaDescribedBy(`${id}-description`),
152
+ h.OnCancel(dispatchClosed()),
153
+ h.Open(isVisible),
154
+ h.Style({
155
155
  width: '100%',
156
156
  height: '100%',
157
157
  maxWidth: '100%',
@@ -163,25 +163,25 @@ export const view = (config) => {
163
163
  ? { position: 'fixed', inset: '0', zIndex: '2147483600' }
164
164
  : {}),
165
165
  }),
166
- ...(isVisible ? [DataAttribute('open', '')] : []),
167
- ...(className ? [Class(className)] : []),
166
+ ...(isVisible ? [h.DataAttribute('open', '')] : []),
167
+ ...(className ? [h.Class(className)] : []),
168
168
  ...attributes,
169
169
  ];
170
- const backdrop = keyed('div')(`${id}-backdrop`, [
171
- Style({ minHeight: '100vh' }),
170
+ const backdrop = h.keyed('div')(`${id}-backdrop`, [
171
+ h.Style({ minHeight: '100vh' }),
172
172
  ...animationAttributes,
173
- ...(isLeaving ? [] : [OnClick(dispatchClosed())]),
174
- ...(backdropClassName ? [Class(backdropClassName)] : []),
173
+ ...(isLeaving ? [] : [h.OnClick(dispatchClosed())]),
174
+ ...(backdropClassName ? [h.Class(backdropClassName)] : []),
175
175
  ...backdropAttributes,
176
176
  ], []);
177
- const panel = keyed('div')(`${id}-panel`, [
178
- Id(`${id}-panel`),
177
+ const panel = h.keyed('div')(`${id}-panel`, [
178
+ h.Id(`${id}-panel`),
179
179
  ...animationAttributes,
180
- ...(panelClassName ? [Class(panelClassName)] : []),
180
+ ...(panelClassName ? [h.Class(panelClassName)] : []),
181
181
  ...panelAttributes,
182
182
  ], [panelContent]);
183
183
  const content = isVisible ? [backdrop, panel] : [];
184
- return keyed('dialog')(id, dialogAttributes, content);
184
+ return h.keyed('dialog')(id, dialogAttributes, content);
185
185
  };
186
186
  /** Creates a memoized dialog view. Static config (className, panelClassName,
187
187
  * etc.) is captured in a closure. Dynamic fields — `model`, `toParentMessage`,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/disclosure/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/disclosure/index.ts"],"names":[],"mappings":"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"}