@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.
- package/dist/jsenv_navi.js +121 -99
- package/dist/jsenv_navi.js.map +20 -16
- package/package.json +1 -1
package/dist/jsenv_navi.js
CHANGED
|
@@ -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-
|
|
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
|
-
|
|
36217
|
-
|
|
36218
|
-
|
|
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
|
|
36234
|
-
|
|
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"
|
|
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
|
-
|
|
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;
|