@jsenv/navi 0.27.52 → 0.27.53

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.
@@ -35510,7 +35510,7 @@ const Dialog = props => {
35510
35510
  focusedBeforeOpen
35511
35511
  });
35512
35512
  };
35513
- const close = e => {
35513
+ const close = (e, detail = {}) => {
35514
35514
  debugPopup(`"${e.type}" on ${getElementSignature(e.target)} -> closeDialog`);
35515
35515
  const dialogEl = ref.current;
35516
35516
  markAutofocusRestoreOnClose(dialogEl);
@@ -35518,7 +35518,8 @@ const Dialog = props => {
35518
35518
  cleanup();
35519
35519
  openedRef.current = false;
35520
35520
  dispatchCustomEvent(dialogEl, "navi_close", {
35521
- event: e
35521
+ event: e,
35522
+ ...detail
35522
35523
  });
35523
35524
  };
35524
35525
  const onRequestOpen = (e, {
@@ -35535,7 +35536,7 @@ const Dialog = props => {
35535
35536
  anchor
35536
35537
  });
35537
35538
  };
35538
- const onRequestClose = e => {
35539
+ const onRequestClose = (e, detail = {}) => {
35539
35540
  const dialogEl = ref.current;
35540
35541
  if (!dialogEl) {
35541
35542
  return;
@@ -35553,15 +35554,15 @@ const Dialog = props => {
35553
35554
  denied = false;
35554
35555
  }
35555
35556
  };
35556
- closeRequestHandler(e, closePermission);
35557
+ closeRequestHandler(e, closePermission, detail);
35557
35558
  if (denied) {
35558
35559
  closePermission.allow = () => {
35559
- close(e);
35560
+ close(e, detail);
35560
35561
  };
35561
35562
  return;
35562
35563
  }
35563
35564
  }
35564
- close(e);
35565
+ close(e, detail);
35565
35566
  };
35566
35567
  return jsx(Box, {
35567
35568
  ...rest,
@@ -35575,7 +35576,9 @@ const Dialog = props => {
35575
35576
  // The <dialog> element covers the full viewport; clicking the backdrop
35576
35577
  // hits the dialog itself (not any child). Close when that happens.
35577
35578
  if (!pointerTrap && e.button === 0 && e.target === ref.current) {
35578
- onRequestClose(e);
35579
+ onRequestClose(e, {
35580
+ isClickOutside: true
35581
+ });
35579
35582
  }
35580
35583
  },
35581
35584
  onCancel: e => {
@@ -35735,7 +35738,7 @@ const Popover = props => {
35735
35738
  focusedBeforeOpen
35736
35739
  });
35737
35740
  };
35738
- const close = e => {
35741
+ const close = (e, detail = {}) => {
35739
35742
  debugPopup(e, `closePopover()`);
35740
35743
  const popoverEl = ref.current;
35741
35744
  markAutofocusRestoreOnClose(popoverEl);
@@ -35744,7 +35747,8 @@ const Popover = props => {
35744
35747
  openedRef.current = false;
35745
35748
  setOpened(false);
35746
35749
  dispatchCustomEvent(popoverEl, "navi_close", {
35747
- event: e
35750
+ event: e,
35751
+ ...detail
35748
35752
  });
35749
35753
  };
35750
35754
  const onRequestOpen = (e, {
@@ -35761,7 +35765,7 @@ const Popover = props => {
35761
35765
  anchor
35762
35766
  });
35763
35767
  };
35764
- const onRequestClose = e => {
35768
+ const onRequestClose = (e, detail = {}) => {
35765
35769
  const popoverEl = ref.current;
35766
35770
  if (!popoverEl) {
35767
35771
  return;
@@ -35779,15 +35783,15 @@ const Popover = props => {
35779
35783
  denied = false;
35780
35784
  }
35781
35785
  };
35782
- closeRequestHandler(e, closePermission);
35786
+ closeRequestHandler(e, closePermission, detail);
35783
35787
  if (denied) {
35784
35788
  closePermission.allow = () => {
35785
- close(e);
35789
+ close(e, detail);
35786
35790
  };
35787
35791
  return;
35788
35792
  }
35789
35793
  }
35790
- close(e);
35794
+ close(e, detail);
35791
35795
  };
35792
35796
  return jsxs(Box, {
35793
35797
  id: id,
@@ -35819,7 +35823,9 @@ const Popover = props => {
35819
35823
  e.preventDefault();
35820
35824
  return;
35821
35825
  }
35822
- onRequestClose(e);
35826
+ onRequestClose(e, {
35827
+ isClickOutside: true
35828
+ });
35823
35829
  }
35824
35830
  }), children]
35825
35831
  });
@@ -35836,7 +35842,7 @@ installImportMetaCssBuild(import.meta);const css$p = /* css */`
35836
35842
  min-width: var(--anchor-width, 0px);
35837
35843
  max-width: 95vw;
35838
35844
  /* max-height covers the placeholder + list; the list scrolls internally */
35839
- max-height: var(--space-available, 95dvh);
35845
+ max-height: min(var(--picker-popup-max-height, 300px), var(--space-available, 95dvh));
35840
35846
  margin: 0;
35841
35847
  padding: 0;
35842
35848
  background: var(--picker-background-color);
@@ -35928,8 +35934,12 @@ installImportMetaCssBuild(import.meta);const css$p = /* css */`
35928
35934
  /* dialog */
35929
35935
  &[aria-haspopup="dialog"] {
35930
35936
  .navi_picker_dialog {
35937
+ --dialog-max-width: 95dvw;
35938
+ --dialog-max-height: 95dvh;
35939
+
35931
35940
  min-width: var(--anchor-width, 0px);
35932
- max-height: 95dvh;
35941
+ max-width: var(--dialog-max-width);
35942
+ max-height: var(--dialog-max-height);
35933
35943
  padding: 0;
35934
35944
  background: var(--picker-background-color);
35935
35945
  border: var(--picker-border-width) solid var(--x-picker-border-color);
@@ -35943,6 +35953,13 @@ installImportMetaCssBuild(import.meta);const css$p = /* css */`
35943
35953
  cursor: default; /* Reset pointer cursor within the select */
35944
35954
  /* overscroll-behavior: contain; */
35945
35955
 
35956
+ &[data-expand-x] {
35957
+ width: var(--dialog-max-width);
35958
+ }
35959
+ &[data-expand-y] {
35960
+ height: var(--dialog-max-height);
35961
+ }
35962
+
35946
35963
  &[open] {
35947
35964
  display: flex;
35948
35965
  flex-direction: column;
@@ -36084,15 +36101,9 @@ const PickerCustom = props => {
36084
36101
  expandedRef.current = expanded;
36085
36102
  const valueAtOpenRef = useRef(null);
36086
36103
  const activeElementAtOpenRef = useRef(null);
36087
- // Tracks whether a uiAction has occurred since the last close denial.
36088
- // true = no pending denial (initial state, or user has interacted since)
36089
- // false = close was denied and user hasn't interacted yet
36090
- // When false, a second close attempt is treated as cancel.
36091
- const uiActionSinceDeniedRef = useRef(true);
36092
36104
  const onOpen = e => {
36093
36105
  expandedRef.current = true;
36094
36106
  setExpanded(true);
36095
- uiActionSinceDeniedRef.current = true;
36096
36107
  const focusedBeforeOpen = e.detail.focusedBeforeOpen;
36097
36108
  activeElementAtOpenRef.current = focusedBeforeOpen;
36098
36109
  debugFocus(e, "picked opened, store element focused", focusedBeforeOpen);
@@ -36198,44 +36209,29 @@ const PickerCustom = props => {
36198
36209
  }
36199
36210
  });
36200
36211
  },
36201
- // Intercept uiAction to detect user interaction after a close denial.
36202
36212
  "uiAction": (v, e) => {
36203
- uiActionSinceDeniedRef.current = true;
36204
36213
  uiActionProp?.(v, e);
36205
36214
  },
36206
36215
  children
36207
36216
  });
36208
36217
  Object.assign(popupProps, {
36209
- closeRequestHandler: (requestCloseEvent, closePermission) => {
36218
+ closeRequestHandler: (requestCloseEvent, closePermission, {
36219
+ isClickOutside
36220
+ } = {}) => {
36210
36221
  const cancelEvent = findEvent(requestCloseEvent, eInChain => eInChain.type === "navi_request_close" && eInChain.detail.isCancel);
36211
- const isCancel = Boolean(cancelEvent);
36212
- const pickerEl = ref.current;
36213
- const inputEl = getPickerInput(pickerEl);
36214
- const valueAtOpen = valueAtOpenRef.current;
36222
+ const isCancel = isClickOutside || Boolean(cancelEvent);
36215
36223
  if (isCancel) {
36216
- uiActionSinceDeniedRef.current = true;
36217
- dispatchRequestSetUIState(inputEl, valueAtOpen, {
36218
- event: requestCloseEvent
36219
- });
36220
- return;
36221
- }
36222
-
36223
- // If close was previously denied and the user hasn't interacted since,
36224
- // treat this re-attempt as a cancel so they are not trapped.
36225
- if (!uiActionSinceDeniedRef.current) {
36226
- debugPopup(requestCloseEvent, `picker close was denied and user did not interact, treating re-attempt as cancel (restoring ${JSON.stringify(valueAtOpen)})`);
36227
- uiActionSinceDeniedRef.current = true;
36224
+ const pickerEl = ref.current;
36225
+ const inputEl = getPickerInput(pickerEl);
36226
+ const valueAtOpen = valueAtOpenRef.current;
36227
+ debugPopup(requestCloseEvent, `picker cancel, restoring value at open ${JSON.stringify(valueAtOpen)}`);
36228
36228
  dispatchRequestSetUIState(inputEl, valueAtOpen, {
36229
36229
  event: requestCloseEvent
36230
36230
  });
36231
36231
  return;
36232
36232
  }
36233
- const valueAtClose = getPickerInputUIState(pickerEl);
36234
- if (compareTwoJsValues(valueAtClose, valueAtOpen)) {
36235
- debugPopup(requestCloseEvent, `picker closed with same value as when it opened (${JSON.stringify(valueAtClose)}), no action dispatched`);
36236
- return;
36237
- }
36238
- debugPopup(requestCloseEvent, `picker attempt to close with value (${JSON.stringify(valueAtClose)}) wait for picker action to close picker`);
36233
+ const pickerEl = ref.current;
36234
+ const inputEl = getPickerInput(pickerEl);
36239
36235
  dispatchRequestAction(inputEl, {
36240
36236
  event: requestCloseEvent,
36241
36237
  name: "picker close",
@@ -36246,10 +36242,8 @@ const PickerCustom = props => {
36246
36242
  // user sees what is wrong, even if the picker has no action prop.
36247
36243
  reportOnInvalid: true,
36248
36244
  onInvalid: () => {
36249
- uiActionSinceDeniedRef.current = false;
36250
36245
  closePermission.deny();
36251
- },
36252
- allowed: () => {}
36246
+ }
36253
36247
  });
36254
36248
  },
36255
36249
  onnavi_open: e => {
@@ -36338,7 +36332,9 @@ const PickerCustom = props => {
36338
36332
  if (expandedRef.current) {
36339
36333
  return {
36340
36334
  name: "mousedown to close picker",
36341
- allowed: () => requestClose(e)
36335
+ allowed: () => requestClose(e, {
36336
+ isCancel: true
36337
+ })
36342
36338
  };
36343
36339
  }
36344
36340
  return {
@@ -36431,7 +36427,8 @@ const PickerContentInsidePopover = props => {
36431
36427
  category: "interaction",
36432
36428
  allowed: () => {
36433
36429
  dispatchCustomEvent(popoverEl, "navi_request_close", {
36434
- event: e
36430
+ event: e,
36431
+ isCancel: true
36435
36432
  });
36436
36433
  }
36437
36434
  });
@@ -36457,7 +36454,8 @@ const PickerContentInsidePopover = props => {
36457
36454
  }
36458
36455
  const popupEl = popupProps.ref.current;
36459
36456
  dispatchCustomEvent(popupEl, "navi_request_close", {
36460
- event: e
36457
+ event: e,
36458
+ isCancel: true
36461
36459
  });
36462
36460
  },
36463
36461
  children: props.trigger
@@ -36472,8 +36470,13 @@ const PickerContentInsideDialog = props => {
36472
36470
  children,
36473
36471
  scrollTrap,
36474
36472
  pointerTrap,
36473
+ dialogExpand,
36474
+ dialogExpandX,
36475
+ dialogExpandY,
36475
36476
  ...rest
36476
36477
  } = props;
36478
+ const expandX = dialogExpand || dialogExpandX;
36479
+ const expandY = dialogExpand || dialogExpandY;
36477
36480
  return jsx(Next, {
36478
36481
  "aria-haspopup": "dialog",
36479
36482
  ...rest,
@@ -36484,6 +36487,8 @@ const PickerContentInsideDialog = props => {
36484
36487
  pointerTrap: pointerTrap,
36485
36488
  centerInVisualViewport: true,
36486
36489
  autoFocus: "fallback",
36490
+ "data-expand-x": expandX ? "" : undefined,
36491
+ "data-expand-y": expandY ? "" : undefined,
36487
36492
  children: children
36488
36493
  })
36489
36494
  });
@@ -37600,10 +37605,6 @@ installImportMetaCssBuild(import.meta);const css$n = /* css */`
37600
37605
  }
37601
37606
  }
37602
37607
 
37603
- fieldset.navi_list_container[navi-selectable] {
37604
- margin: 0; /* Reset margin that might come from fieldset */
37605
- padding: 0; /* Reset padding that might come from fieldset */
37606
- }
37607
37608
  .navi_list_container[navi-selectable] {
37608
37609
  &[data-callout] {
37609
37610
  --x-list-border-color: var(--callout-color);
@@ -37847,7 +37848,6 @@ const ListSelectable = props => {
37847
37848
  setCurrentId(initialEl.id);
37848
37849
  }, []);
37849
37850
  const listVnode = jsx(Next, {
37850
- as: "fieldset",
37851
37851
  "navi-selectable": "",
37852
37852
  "navi-has-selected-background": selectedIndicator === "backgroundColor" ? "" : undefined,
37853
37853
  ...listControlRootProps,
@@ -38256,9 +38256,10 @@ installImportMetaCssBuild(import.meta);const ListItemTrackerContext = createCont
38256
38256
  const GroupItemTrackerContext = createContext(null);
38257
38257
  const PendingScrollRefContext = createContext(null);
38258
38258
  // Controls how List.Item behaves when match=false (set via List searchNoMatchMode prop):
38259
- // "remove" — remove from DOM (default)
38259
+ // "remove" — remove from DOM (default)
38260
38260
  // "invisible_and_inert" — keep in DOM, invisible and non-interactive (preserves layout, no content visible)
38261
38261
  // "muted" — keep in DOM, visible but opacified and still interactive
38262
+ // "below" — keep in DOM, fully visible, pushed below matching items via CSS order
38262
38263
  const SearchNoMatchModeContext = createContext("remove");
38263
38264
 
38264
38265
  // When total rendered items exceeds renderBudget, a render window [start, end)
@@ -38285,7 +38286,6 @@ const css$m = /* css */`
38285
38286
  --list-border-width: 1px;
38286
38287
  --list-border-color: light-dark(#ccc, #555);
38287
38288
  --list-background-color: light-dark(#fff, #1e1e1e);
38288
- --list-max-height: 220px;
38289
38289
  }
38290
38290
  .navi_list_item {
38291
38291
  --list-item-padding-x-default: 0px;
@@ -38356,8 +38356,8 @@ const css$m = /* css */`
38356
38356
  .navi_list_scroll_container {
38357
38357
  width: inherit;
38358
38358
  min-width: inherit;
38359
- max-width: inherit;
38360
- max-height: var(--list-max-height);
38359
+ max-width: var(--list-max-width, inherit);
38360
+ max-height: var(--list-max-height, inherit);
38361
38361
  overflow: auto;
38362
38362
  overscroll-behavior: inherit; /* inherit select behavior */
38363
38363
  }
@@ -38365,6 +38365,12 @@ const css$m = /* css */`
38365
38365
  &[data-expand-x] {
38366
38366
  width: 100%;
38367
38367
  }
38368
+ &[data-expand-y] {
38369
+ --list-max-height: none;
38370
+ }
38371
+ &[navi-nothing-to-display] {
38372
+ display: none;
38373
+ }
38368
38374
  &[popover] {
38369
38375
  position: absolute;
38370
38376
  inset: unset;
@@ -38481,6 +38487,8 @@ const css$m = /* css */`
38481
38487
  /* background: pink; */
38482
38488
  }
38483
38489
  &[data-horizontal] {
38490
+ --list-max-height: none;
38491
+
38484
38492
  .navi_list_virtual_filler {
38485
38493
  width: var(--size-to-fill, 0px);
38486
38494
  height: 100%;
@@ -38630,8 +38638,8 @@ const ListUI = props => {
38630
38638
  children,
38631
38639
  popover,
38632
38640
  expandX,
38641
+ expandY,
38633
38642
  expand,
38634
- maxHeight,
38635
38643
  onListVisibleItemsChange,
38636
38644
  virtualItemSize,
38637
38645
  lockSize,
@@ -38696,6 +38704,12 @@ const ListUI = props => {
38696
38704
  const getItemById = itemId => {
38697
38705
  return tracker.itemsSignal.peek().find(item => item.id === itemId);
38698
38706
  };
38707
+ const noMatchCount = tracker.noMatchCountSignal.value;
38708
+ const itemCount = tracker.countSignal.value;
38709
+ const allNoMatch = noMatchCount > 0 && noMatchCount === itemCount;
38710
+ const fallbackDisabled = fallback !== undefined && !fallback;
38711
+ const searchFallbackDisabled = searchFallback !== undefined && !searchFallback;
38712
+ const nothingToDisplay = allNoMatch && searchFallbackDisabled && searchNoMatchMode === "remove" || itemCount === 0 && fallbackDisabled;
38699
38713
  return jsx(Box, {
38700
38714
  ...rest,
38701
38715
  ref: ref,
@@ -38703,9 +38717,12 @@ const ListUI = props => {
38703
38717
  popover: popover,
38704
38718
  "data-horizontal": horizontal ? "" : undefined,
38705
38719
  "data-expand-x": expandX || expand ? "" : undefined,
38720
+ "data-expand-y": expandY || expand ? "" : undefined,
38706
38721
  expandX: expandX,
38722
+ expandY: expandY,
38707
38723
  expand: expand,
38708
- maxHeight: maxHeight,
38724
+ "navi-zero-match": allNoMatch ? "" : undefined,
38725
+ "navi-nothing-to-display": nothingToDisplay ? "" : undefined,
38709
38726
  styleCSSVars: LIST_STYLE_CSS_VARS,
38710
38727
  pseudoClasses: LIST_PSEUDO_CLASSES,
38711
38728
  hasChildUsingForwardedProps: true,
@@ -38730,6 +38747,7 @@ const ListUI = props => {
38730
38747
  searchNoMatchMode: searchNoMatchMode,
38731
38748
  separator: separator,
38732
38749
  expandX: expandX,
38750
+ expandY: expandY,
38733
38751
  expand: expand,
38734
38752
  horizontal: horizontal,
38735
38753
  spacing: spacing,
@@ -38766,14 +38784,14 @@ const ListFirstResolver = props => {
38766
38784
  * fallback?: import("ignore:preact").ComponentChildren,
38767
38785
  * searchFallback?: import("ignore:preact").ComponentChildren,
38768
38786
  * searchText?: string,
38769
- * searchNoMatchMode?: "remove" | "invisible_and_inert" | "muted",
38787
+ * searchNoMatchMode?: "remove" | "invisible_and_inert" | "muted" | "below",
38770
38788
  * separator?: boolean | import("ignore:preact").ComponentChildren,
38771
38789
  * lockSize?: boolean,
38772
38790
  * horizontal?: boolean,
38773
38791
  * spacing?: string,
38774
38792
  * expandX?: boolean,
38793
+ * expandY?: boolean,
38775
38794
  * expand?: boolean,
38776
- * maxHeight?: string | number,
38777
38795
  * children?: import("ignore:preact").ComponentChildren,
38778
38796
  * [key: string]: any,
38779
38797
  * }>}
@@ -38786,6 +38804,7 @@ const ListContent = ({
38786
38804
  searchNoMatchMode,
38787
38805
  separator,
38788
38806
  expandX,
38807
+ expandY,
38789
38808
  expand,
38790
38809
  horizontal,
38791
38810
  spacing,
@@ -38807,6 +38826,7 @@ const ListContent = ({
38807
38826
  margin: "0"
38808
38827
  }) : separator,
38809
38828
  expandX: expandX || expand,
38829
+ expandY: expandY || expand,
38810
38830
  horizontal: horizontal,
38811
38831
  spacing: spacing,
38812
38832
  ...listProps,
@@ -38822,6 +38842,7 @@ const ListContent = ({
38822
38842
  };
38823
38843
  const LIST_STYLE_CSS_VARS = {
38824
38844
  maxHeight: "--list-max-height",
38845
+ maxWidth: "--list-max-width",
38825
38846
  borderColor: "--list-border-color",
38826
38847
  borderRadius: "--list-border-radius",
38827
38848
  borderWidth: "--list-border-width"
@@ -39240,7 +39261,6 @@ const UnorderedList = ({
39240
39261
  return jsxs(Box, {
39241
39262
  as: "ul",
39242
39263
  flex: horizontal ? "x" : "y",
39243
- flexWrap: true,
39244
39264
  ...rest,
39245
39265
  spacing: spacing,
39246
39266
  baseClassName: "navi_list",
@@ -40672,38 +40692,6 @@ installImportMetaCssBuild(import.meta);const css$i = /* css */`
40672
40692
  }
40673
40693
  }
40674
40694
  `;
40675
-
40676
- /**
40677
- * A button-like trigger that opens a picker when clicked.
40678
- *
40679
- * Use the `type` prop to choose what kind of picker to open:
40680
- * "date" — calendar day
40681
- * "month" — year + month
40682
- * "week" — ISO week
40683
- * "time" — hours + minutes
40684
- * "datetime" — date + time
40685
- * "color" — color chooser
40686
- * "hour" — fixed time slots (derived from min/max/step)
40687
- *
40688
- * When `children` are provided, the picker opens a popover or dialog instead
40689
- * of the browser-native picker. On small screens a dialog is used automatically;
40690
- * on larger screens a popover is used. Pass `mode="dialog"` or `mode="popover"`
40691
- * to force one. The children are rendered inside the popup.
40692
- *
40693
- * Props:
40694
- * type — picker variant (see above)
40695
- * value — controlled value
40696
- * uiAction — called with the new value when the user picks one
40697
- * name — form field name
40698
- * placeholder — shown when no value is selected
40699
- * required — marks the field as required
40700
- * min — minimum allowed value; accepts a Date or a raw string
40701
- * max — maximum allowed value; accepts a Date or a raw string
40702
- * step — step interval
40703
- * disabled — disables the picker
40704
- * children — content to display inside the popup (enables popover/dialog mode)
40705
- * mode — "popover" or "dialog"; auto-detected from screen size when omitted
40706
- */
40707
40695
  const PickerButton = props => {
40708
40696
  import.meta.css = [css$i, "@jsenv/navi/src/control/picker/picker.jsx"];
40709
40697
  if (typeof props.maxLines === "string") {
@@ -40961,6 +40949,40 @@ const PickerFirstResolver = props => {
40961
40949
  ...props
40962
40950
  });
40963
40951
  };
40952
+
40953
+ /**
40954
+ * Button-like trigger that opens a picker (native or custom popup) when clicked.
40955
+ *
40956
+ * Without `children`, opens the browser-native picker for the given `type`.
40957
+ * With `children`, opens a popover (desktop) or dialog (mobile) containing the children.
40958
+ * Pass `mode="popover"` or `mode="dialog"` to override the automatic choice.
40959
+ *
40960
+ * @type {import("ignore:preact").FunctionComponent<{
40961
+ * type?: "date" | "month" | "week" | "time" | "datetime" | "color" | "hour" | "navi_time" | "navi_number" | "navi_percentage",
40962
+ * value?: any,
40963
+ * defaultValue?: any,
40964
+ * name?: string,
40965
+ * placeholder?: import("ignore:preact").ComponentChildren,
40966
+ * required?: boolean,
40967
+ * min?: Date | string | number,
40968
+ * max?: Date | string | number,
40969
+ * step?: string | number,
40970
+ * disabled?: boolean,
40971
+ * readOnly?: boolean,
40972
+ * uiAction?: (value: any, event: Event) => void,
40973
+ * action?: (value: any, event: Event) => void,
40974
+ * children?: import("ignore:preact").ComponentChildren,
40975
+ * mode?: "popover" | "dialog",
40976
+ * variant?: "icon" | "headless",
40977
+ * icon?: import("ignore:preact").ComponentChildren,
40978
+ * maxLines?: number,
40979
+ * dialogExpand?: boolean,
40980
+ * dialogExpandX?: boolean,
40981
+ * dialogExpandY?: boolean,
40982
+ * ref?: import("ignore:preact").RefObject<HTMLElement>,
40983
+ * [key: string]: any,
40984
+ * }>}
40985
+ */
40964
40986
  const Picker = createComponentResolver([PickerFirstResolver, PickerPresetResolver, PickerCustomResolver, PickerTypeResolver, PickerButton]);
40965
40987
  Picker.UI = PickerDefaultUI;
40966
40988
  Picker.UI.Date = PickerDateUI;