@jsenv/navi 0.29.298 → 0.29.299
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/dev/jsenv_navi.js +260 -241
- package/dist/dev/jsenv_navi.js.map +8 -8
- package/dist/jsenv_navi.js +260 -241
- package/dist/jsenv_navi.js.map +8 -8
- package/package.json +2 -1
package/dist/jsenv_navi.js
CHANGED
|
@@ -48205,7 +48205,7 @@ const COMMAND_DEFAULT_PROPS_FACTORIES = {
|
|
|
48205
48205
|
* (it wears it itself) and loses the shrink under the finger, which has
|
|
48206
48206
|
* nothing left to scale but the interactive area itself.
|
|
48207
48207
|
*/
|
|
48208
|
-
const Button = createComponentResolver([ButtonFirstResolver, ButtonRouteResolver, ButtonCommandPropResolver, ButtonConfirmResolver, ButtonUI]);
|
|
48208
|
+
const Button = /*#__PURE__*/createComponentResolver([ButtonFirstResolver, ButtonRouteResolver, ButtonCommandPropResolver, ButtonConfirmResolver, ButtonUI]);
|
|
48209
48209
|
|
|
48210
48210
|
installImportMetaCssBuild(import.meta);
|
|
48211
48211
|
const css$O = /* css */`.navi_control_swap {
|
|
@@ -51573,7 +51573,7 @@ const InputTextualFirstResolver = props => {
|
|
|
51573
51573
|
...props
|
|
51574
51574
|
});
|
|
51575
51575
|
};
|
|
51576
|
-
const InputTextual = createComponentResolver([InputTextualAsTextResolver, InputTextualFirstResolver, InputWithListResolver, InputWithSuggestionsResolver, InputTypeResolver, InputModeResolver, InputHeadlessResolver, InputTextualUI]);
|
|
51576
|
+
const InputTextual = /*#__PURE__*/createComponentResolver([InputTextualAsTextResolver, InputTextualFirstResolver, InputWithListResolver, InputWithSuggestionsResolver, InputTypeResolver, InputModeResolver, InputHeadlessResolver, InputTextualUI]);
|
|
51577
51577
|
const RealInput = ({
|
|
51578
51578
|
maxLength,
|
|
51579
51579
|
...domProps
|
|
@@ -65110,209 +65110,6 @@ const ListFirstResolver = props => {
|
|
|
65110
65110
|
})
|
|
65111
65111
|
});
|
|
65112
65112
|
};
|
|
65113
|
-
|
|
65114
|
-
/**
|
|
65115
|
-
* List — generic virtualized scroll container.
|
|
65116
|
-
* Items must use <List.Item> to participate in tracking.
|
|
65117
|
-
*
|
|
65118
|
-
* @type {import("ignore:preact").FunctionComponent<{
|
|
65119
|
-
* selectable?: boolean,
|
|
65120
|
-
* multiple?: boolean,
|
|
65121
|
-
* deselectable?: boolean,
|
|
65122
|
-
* maxLength?: number,
|
|
65123
|
-
* maxLengthGuard?: number,
|
|
65124
|
-
* parallelGuard?: number,
|
|
65125
|
-
* standalone?: boolean,
|
|
65126
|
-
* action?: (value: any) => void,
|
|
65127
|
-
* uiAction?: (value: any) => void,
|
|
65128
|
-
* popover?: boolean,
|
|
65129
|
-
* role?: string,
|
|
65130
|
-
* renderBudget?: number | string,
|
|
65131
|
-
* renderBudgetSkipCheck?: boolean,
|
|
65132
|
-
* virtualItemSize?: number,
|
|
65133
|
-
* onListVisibleItemsChange?: (visibleItems: any[]) => void,
|
|
65134
|
-
* scrolled?: "start" | "end" | number | {id: string, offset?: number},
|
|
65135
|
-
* defaultScrolled?: "start" | "end" | number | {id: string, offset?: number},
|
|
65136
|
-
* onScrolledChange?: (scrolled: {id: string, index: number, offset: number}) => void,
|
|
65137
|
-
* scroller?: "self" | "parent" | "document" | Element | {current: Element},
|
|
65138
|
-
* hoverWhileScrolling?: boolean,
|
|
65139
|
-
* fallback?: import("ignore:preact").ComponentChildren,
|
|
65140
|
-
* searchFallback?: import("ignore:preact").ComponentChildren,
|
|
65141
|
-
* searchText?: string,
|
|
65142
|
-
* searchNoMatchMode?: "remove" | "invisible_and_inert" | "muted",
|
|
65143
|
-
* loading?: boolean,
|
|
65144
|
-
* loadingFallback?: "skeleton" | "loader" | import("ignore:preact").ComponentChildren,
|
|
65145
|
-
* loadingSkeletonCount?: number,
|
|
65146
|
-
* renderSkeleton?: false | ((index: number) => import("ignore:preact").ComponentChildren),
|
|
65147
|
-
* error?: boolean | import("ignore:preact").ComponentChildren,
|
|
65148
|
-
* separator?: boolean | import("ignore:preact").ComponentChildren,
|
|
65149
|
-
* itemTransition?: boolean,
|
|
65150
|
-
* lockSize?: boolean,
|
|
65151
|
-
* horizontal?: boolean,
|
|
65152
|
-
* spacing?: string,
|
|
65153
|
-
* columns?: string,
|
|
65154
|
-
* itemColumns?: string,
|
|
65155
|
-
* alignX?: string,
|
|
65156
|
-
* alignY?: string,
|
|
65157
|
-
* flexWrap?: boolean,
|
|
65158
|
-
* expandX?: boolean,
|
|
65159
|
-
* expandY?: boolean,
|
|
65160
|
-
* expand?: boolean,
|
|
65161
|
-
* children?: import("ignore:preact").ComponentChildren,
|
|
65162
|
-
* [key: string]: any,
|
|
65163
|
-
* }>}
|
|
65164
|
-
* @param {string} [props.columns]
|
|
65165
|
-
* The list's own columns: a `grid-template-columns` value the ITEMS are laid
|
|
65166
|
-
* into — a sheet of icons (`repeat(auto-fill, minmax(2.5rem, 1fr))`), a row of
|
|
65167
|
-
* choices (`repeat(3, minmax(0, 1fr))`). Each item takes one cell, and an item
|
|
65168
|
-
* meant to take a whole line says so for itself
|
|
65169
|
-
* (`style={{ gridColumn: "1 / -1" }}`). Several items to a line is a shape the
|
|
65170
|
-
* list cannot virtualize — its render window and the room it holds for the
|
|
65171
|
-
* rows it does not draw both count one item per line — so it is for a set of
|
|
65172
|
-
* items the caller renders whole, not for a `<List.Items>` collection.
|
|
65173
|
-
* @param {string} [props.itemColumns]
|
|
65174
|
-
* The columns inside an ITEM: a `grid-template-columns` value each item fills
|
|
65175
|
-
* with its own children, a table whose cells line up down the list. Every item
|
|
65176
|
-
* becomes a subgrid row spanning all the columns, so a column is as wide as
|
|
65177
|
-
* the widest cell in it among the rows actually in the DOM — real column
|
|
65178
|
-
* sizing that stays right as the window moves. Rows of a table, then, where
|
|
65179
|
-
* `columns` above is a grid of items; the two cannot both be set.
|
|
65180
|
-
* @param {string} [props.alignX]
|
|
65181
|
-
* Where the items sit across the track — `alignX="center"` centres a
|
|
65182
|
-
* horizontal list's row of items inside a list wider than they are. Together
|
|
65183
|
-
* with `alignY`, `align` and `flexWrap`, this reaches the `<ul>` holding the
|
|
65184
|
-
* items rather than the frame drawn around it: the frame's only child is the
|
|
65185
|
-
* scroll box, which fills it and has nothing to arrange.
|
|
65186
|
-
* @param {boolean} [props.flexWrap]
|
|
65187
|
-
* Lets a horizontal list's items fall to the next line instead of running
|
|
65188
|
-
* past the edge — a row of choices under a `maxWidth`, say. Same caveat as
|
|
65189
|
-
* `columns` above: a line holding several items is not virtualizable.
|
|
65190
|
-
* @param {string} [props.overflow]
|
|
65191
|
-
* `"visible"` lets the items paint outside the list — a check in a row's
|
|
65192
|
-
* corner, a badge crossing the edge. A list clips by default, which is what
|
|
65193
|
-
* its rounded corners and its scroll box need, and the two cannot both be
|
|
65194
|
-
* true: asking for visible gives up the clipping, corners included.
|
|
65195
|
-
* @param {boolean} [props.itemTransition]
|
|
65196
|
-
* Names each row, so a change the application wraps in
|
|
65197
|
-
* `document.startViewTransition` is seen row by row — rows moving to their new
|
|
65198
|
-
* place, an arriving row appearing where it lands — instead of the list
|
|
65199
|
-
* cross-fading as a block. The rows are drawn inside the list's own picture,
|
|
65200
|
-
* so one coming from outside the visible part of the list is cut at the list's
|
|
65201
|
-
* edge like any other overflow. Requires nested view transition groups
|
|
65202
|
-
* (Chrome/Edge 140+): elsewhere the rows are left unnamed and the change
|
|
65203
|
-
* simply happens — but the browser still names the document root, so the page
|
|
65204
|
-
* cross-fades as a whole unless the application says otherwise, which is its
|
|
65205
|
-
* call and not the list's:
|
|
65206
|
-
* ```css
|
|
65207
|
-
* @supports not (view-transition-group: contain) {
|
|
65208
|
-
* :root { view-transition-name: none; }
|
|
65209
|
-
* }
|
|
65210
|
-
* ```
|
|
65211
|
-
* @param {false|((index: number) => any)} [props.renderSkeleton]
|
|
65212
|
-
* What a row on its way looks like — a row of the shape the real ones will
|
|
65213
|
-
* have, so nothing moves when they arrive. Used for the rows a `<List.Items>`
|
|
65214
|
-
* stands for and does not hold yet, and for the placeholder rows drawn while
|
|
65215
|
-
* the whole list is `loading`. Defaults to a bare `<List.Item skeleton>`.
|
|
65216
|
-
* @param {"skeleton"|"loader"|import("ignore:preact").ComponentChildren} [props.loadingFallback="skeleton"]
|
|
65217
|
-
* What to display in place of the items while `loading` — that is, while
|
|
65218
|
-
* there is nothing to show at all: `"skeleton"` renders
|
|
65219
|
-
* `loadingSkeletonCount` placeholder rows (look:
|
|
65220
|
-
* `renderSkeleton`), `"loader"` a single centered spinner, and
|
|
65221
|
-
* anything else is rendered as-is in a row of its own. A falsy value
|
|
65222
|
-
* displays nothing. A list that knows how many rows it will have has no use
|
|
65223
|
-
* for this — see `<List.Items count>`, whose not-yet-loaded rows are drawn
|
|
65224
|
-
* as skeletons in place, one per row, virtualized like the rest.
|
|
65225
|
-
* @param {number} [props.loadingSkeletonCount=3]
|
|
65226
|
-
* How many placeholder rows `loadingFallback="skeleton"` draws. `0` says the
|
|
65227
|
-
* list is already known to be empty: the empty `fallback` shows right away
|
|
65228
|
-
* rather than an empty frame, so nothing moves when the response arrives.
|
|
65229
|
-
* @param {"start"|"end"|number|{id: string, offset?: number}} [props.defaultScrolled="start"]
|
|
65230
|
-
* Where the list opens, after which the user owns the scroll. `"end"` is a
|
|
65231
|
-
* thread read backwards — the last rows are the ones to show, and the ones
|
|
65232
|
-
* asked for first. A number opens on that row of the collection. `{id,
|
|
65233
|
-
* offset}` — what `onScrolledChange` hands out — opens on a NAMED row,
|
|
65234
|
-
* `offset` pixels below where the row would land on its own: the row is asked
|
|
65235
|
-
* for by name (see the range's own `around`), then put back by MEASURING it,
|
|
65236
|
-
* so it lands where it was even if rows were inserted before it, and whatever
|
|
65237
|
-
* the screen it was saved on. `offset: 0` is where a `scrollIntoView()` puts
|
|
65238
|
-
* it — in front of the fixed bar the scroller gives room for, below the
|
|
65239
|
-
* sticky header and the group label the row lives under — so nothing of that
|
|
65240
|
-
* room has to be restated as a number by whoever asks.
|
|
65241
|
-
* @param {"start"|"end"|number|{id: string, offset?: number}} [props.scrolled]
|
|
65242
|
-
* The same, but held: the list goes back there every time this changes, even
|
|
65243
|
-
* after the user has scrolled — the caller owns where the list is (see
|
|
65244
|
-
* `defaultScrolled` for the uncontrolled form, and `open`/`defaultOpen`
|
|
65245
|
-
* elsewhere in navi for the same pair). When the named row turns out not to
|
|
65246
|
-
* exist — a message deleted since — the list opens at `defaultScrolled`
|
|
65247
|
-
* instead.
|
|
65248
|
-
*
|
|
65249
|
-
* In every form the list holds itself there while it is still finding out
|
|
65250
|
-
* how many rows there are and how tall one is, and lets go the moment the
|
|
65251
|
-
* user reaches for the list.
|
|
65252
|
-
* @param {(scrolled: {id: string, index: number, offset: number}) => void} [props.onScrolledChange]
|
|
65253
|
-
* Where the list is, as the user scrolls: the row at the top of the view and
|
|
65254
|
-
* how far below the place a row lands on its own (see `defaultScrolled`) it
|
|
65255
|
-
* starts. Keep it to come back to it
|
|
65256
|
-
* later through `scrolled`/`defaultScrolled` — an index would not do, since
|
|
65257
|
-
* rows get inserted while a list is being read.
|
|
65258
|
-
* @param {"self"|"parent"|"document"|Element|{current: Element}} [props.scroller="self"]
|
|
65259
|
-
* Which box scrolls. `"self"` gives the list a scroll box of its own;
|
|
65260
|
-
* `"parent"` makes it virtualize against the scrollable ancestor it lives in
|
|
65261
|
-
* (the page, a panel) — no scroll box nested inside another one, no height
|
|
65262
|
-
* to compute.
|
|
65263
|
-
*
|
|
65264
|
-
* `"parent"` finds that ancestor by measuring: the nearest one whose content
|
|
65265
|
-
* actually overflows it, the page if none does. Declaring `overflow` is not
|
|
65266
|
-
* enough to be picked (a box with `overflow-x: auto` that grows with its
|
|
65267
|
-
* content computes `overflow-y: auto` without ever scrolling), and the
|
|
65268
|
-
* answer is taken again as the geometry moves, so an ancestor that starts to
|
|
65269
|
-
* scroll once it fills up is picked up then. When that is still not the box
|
|
65270
|
-
* you mean, say so: `"document"`, or the element itself (a ref works) —
|
|
65271
|
-
* nothing is guessed then.
|
|
65272
|
-
* @param {boolean} [props.hoverWhileScrolling=false]
|
|
65273
|
-
* Whether the rows still answer the pointer while the scroller they live in
|
|
65274
|
-
* is moving. They do not by default: a scroll slides the rows under a
|
|
65275
|
-
* motionless pointer, so the browser reports a hover on each of them, and
|
|
65276
|
-
* the user asked to scroll, not to hover. The cost of taking them at face
|
|
65277
|
-
* value is paid by whatever hover triggers — a highlight elsewhere in the
|
|
65278
|
-
* tree, a prefetch, a map — at the worst moment, mid-scroll.
|
|
65279
|
-
*
|
|
65280
|
-
* Pass `true` for a list whose rows must stay live under the pointer while
|
|
65281
|
-
* it scrolls. The trade of the default is the mirror one: right after a
|
|
65282
|
-
* scroll, the row under the pointer lights up only once the pointer moves.
|
|
65283
|
-
* @param {boolean} [props.deselectable]
|
|
65284
|
-
* A single-select list allowed to hold nothing: the selected row, pressed
|
|
65285
|
-
* again, lets go. Without it the list is a radio group — a choice, once
|
|
65286
|
-
* made, moves to another row but never goes away. A `multiple` list toggles
|
|
65287
|
-
* its rows already.
|
|
65288
|
-
* @param {number} [props.maxLength]
|
|
65289
|
-
* How many items a `selectable multiple` list accepts — the same word, and
|
|
65290
|
-
* the same behaviour, as `maxLength` on a text field: a rule the list is
|
|
65291
|
-
* judged against, not a wall. A longer selection is allowed to exist and is
|
|
65292
|
-
* reported as invalid, which is what lets a value coming from elsewhere (an
|
|
65293
|
-
* API, a URL) be shown and then corrected.
|
|
65294
|
-
* @param {number} [props.maxLengthGuard]
|
|
65295
|
-
* The same limit, enforced as the selection is made: while the list holds as
|
|
65296
|
-
* many items as it accepts, the ones not selected go read-only — still
|
|
65297
|
-
* pointable, focusable and pressable, answering `"[max] max."` instead of
|
|
65298
|
-
* taking — and `uiAction` is not called. The selected ones stay takeable
|
|
65299
|
-
* back, so a selection that arrived too long can always be brought back
|
|
65300
|
-
* under the limit. Implies `maxLength` for validity.
|
|
65301
|
-
* @param {number} [props.parallelGuard=4]
|
|
65302
|
-
* How many runs the rows may have in flight at once, for a list whose rows
|
|
65303
|
-
* carry their own `action` (a button per row). While that many are out, every
|
|
65304
|
-
* row that is not running goes read-only and says how many it is waiting on;
|
|
65305
|
-
* the next press is possible again as soon as one comes back. `Infinity`
|
|
65306
|
-
* lifts it. Counts runs, not values — `maxLengthGuard` above is the one that
|
|
65307
|
-
* says how many things the selection may hold.
|
|
65308
|
-
* @param {boolean} [props.standalone]
|
|
65309
|
-
* This list answers for itself: it does not register with the control group
|
|
65310
|
-
* or picker around it, so its selection stays out of that value and nothing
|
|
65311
|
-
* coming down — a distributed value, a reset — reaches it. What a popup whose
|
|
65312
|
-
* one answer is spread over several lists says, so that none of them is taken
|
|
65313
|
-
* for the answer itself.
|
|
65314
|
-
*/
|
|
65315
|
-
const List = createComponentResolver([ListFirstResolver, ListSelectableResolver, ListUI]);
|
|
65316
65113
|
const ListContent = ({
|
|
65317
65114
|
role,
|
|
65318
65115
|
fallback,
|
|
@@ -67529,14 +67326,13 @@ const LIST_ITEM_STYLE_CSS_VARS = {
|
|
|
67529
67326
|
* search-driven scroll-to-top-match behavior. `matchRanges` are [start, end]
|
|
67530
67327
|
* ranges highlighted via the CSS Highlight API.
|
|
67531
67328
|
*/
|
|
67532
|
-
const ListItem = createComponentResolver([ListItemFirstResolver, ListItemRowResolver, ListItemSkeletonResolver, ListItemSelectableResolver, ListItemHeaderOrFooterResolver, ListItemPresentationResolver, ListItemUI],
|
|
67329
|
+
const ListItem = /*#__PURE__*/createComponentResolver([ListItemFirstResolver, ListItemRowResolver, ListItemSkeletonResolver, ListItemSelectableResolver, ListItemHeaderOrFooterResolver, ListItemPresentationResolver, ListItemUI],
|
|
67533
67330
|
// Rendered by the hundred, and almost always with the same primitive props:
|
|
67534
67331
|
// a selection change re-renders the list, and every row but two has nothing
|
|
67535
67332
|
// to change.
|
|
67536
67333
|
{
|
|
67537
67334
|
pure: true
|
|
67538
67335
|
});
|
|
67539
|
-
List.Item = ListItem;
|
|
67540
67336
|
|
|
67541
67337
|
// Everything the list knows about the collection while its children are being
|
|
67542
67338
|
// rendered: how many rows it has in total, which of them are actually held, and
|
|
@@ -68296,7 +68092,6 @@ const ListItems = ({
|
|
|
68296
68092
|
}
|
|
68297
68093
|
return rows;
|
|
68298
68094
|
};
|
|
68299
|
-
List.Items = ListItems;
|
|
68300
68095
|
|
|
68301
68096
|
// What is drawn where rows were asked for and never came: the sentence and the
|
|
68302
68097
|
// way out, in the row itself — the rest of the list is fine, so replacing all
|
|
@@ -68897,6 +68692,219 @@ const resolveSeparatorVnode = (separator, gapIndex) => {
|
|
|
68897
68692
|
}
|
|
68898
68693
|
return separator;
|
|
68899
68694
|
};
|
|
68695
|
+
const ListResolved = /*#__PURE__*/createComponentResolver([ListFirstResolver, ListSelectableResolver, ListUI]);
|
|
68696
|
+
|
|
68697
|
+
// Declared last because Item and Items are consts defined above, and they are
|
|
68698
|
+
// folded into the declaration rather than written onto List afterwards
|
|
68699
|
+
// (`List.Item = ListItem`): List is what createComponentResolver returns, an
|
|
68700
|
+
// object a bundler cannot see through, so a property assigned to it later is a
|
|
68701
|
+
// side effect it has to keep — and with it List, its rows and everything they
|
|
68702
|
+
// import, in a bundle that never renders a list. See Picker for the same shape.
|
|
68703
|
+
/**
|
|
68704
|
+
* List — generic virtualized scroll container.
|
|
68705
|
+
* Items must use <List.Item> to participate in tracking.
|
|
68706
|
+
*
|
|
68707
|
+
* @type {import("ignore:preact").FunctionComponent<{
|
|
68708
|
+
* selectable?: boolean,
|
|
68709
|
+
* multiple?: boolean,
|
|
68710
|
+
* deselectable?: boolean,
|
|
68711
|
+
* maxLength?: number,
|
|
68712
|
+
* maxLengthGuard?: number,
|
|
68713
|
+
* parallelGuard?: number,
|
|
68714
|
+
* standalone?: boolean,
|
|
68715
|
+
* action?: (value: any) => void,
|
|
68716
|
+
* uiAction?: (value: any) => void,
|
|
68717
|
+
* popover?: boolean,
|
|
68718
|
+
* role?: string,
|
|
68719
|
+
* renderBudget?: number | string,
|
|
68720
|
+
* renderBudgetSkipCheck?: boolean,
|
|
68721
|
+
* virtualItemSize?: number,
|
|
68722
|
+
* onListVisibleItemsChange?: (visibleItems: any[]) => void,
|
|
68723
|
+
* scrolled?: "start" | "end" | number | {id: string, offset?: number},
|
|
68724
|
+
* defaultScrolled?: "start" | "end" | number | {id: string, offset?: number},
|
|
68725
|
+
* onScrolledChange?: (scrolled: {id: string, index: number, offset: number}) => void,
|
|
68726
|
+
* scroller?: "self" | "parent" | "document" | Element | {current: Element},
|
|
68727
|
+
* hoverWhileScrolling?: boolean,
|
|
68728
|
+
* fallback?: import("ignore:preact").ComponentChildren,
|
|
68729
|
+
* searchFallback?: import("ignore:preact").ComponentChildren,
|
|
68730
|
+
* searchText?: string,
|
|
68731
|
+
* searchNoMatchMode?: "remove" | "invisible_and_inert" | "muted",
|
|
68732
|
+
* loading?: boolean,
|
|
68733
|
+
* loadingFallback?: "skeleton" | "loader" | import("ignore:preact").ComponentChildren,
|
|
68734
|
+
* loadingSkeletonCount?: number,
|
|
68735
|
+
* renderSkeleton?: false | ((index: number) => import("ignore:preact").ComponentChildren),
|
|
68736
|
+
* error?: boolean | import("ignore:preact").ComponentChildren,
|
|
68737
|
+
* separator?: boolean | import("ignore:preact").ComponentChildren,
|
|
68738
|
+
* itemTransition?: boolean,
|
|
68739
|
+
* lockSize?: boolean,
|
|
68740
|
+
* horizontal?: boolean,
|
|
68741
|
+
* spacing?: string,
|
|
68742
|
+
* columns?: string,
|
|
68743
|
+
* itemColumns?: string,
|
|
68744
|
+
* alignX?: string,
|
|
68745
|
+
* alignY?: string,
|
|
68746
|
+
* flexWrap?: boolean,
|
|
68747
|
+
* expandX?: boolean,
|
|
68748
|
+
* expandY?: boolean,
|
|
68749
|
+
* expand?: boolean,
|
|
68750
|
+
* children?: import("ignore:preact").ComponentChildren,
|
|
68751
|
+
* [key: string]: any,
|
|
68752
|
+
* }>}
|
|
68753
|
+
* @param {string} [props.columns]
|
|
68754
|
+
* The list's own columns: a `grid-template-columns` value the ITEMS are laid
|
|
68755
|
+
* into — a sheet of icons (`repeat(auto-fill, minmax(2.5rem, 1fr))`), a row of
|
|
68756
|
+
* choices (`repeat(3, minmax(0, 1fr))`). Each item takes one cell, and an item
|
|
68757
|
+
* meant to take a whole line says so for itself
|
|
68758
|
+
* (`style={{ gridColumn: "1 / -1" }}`). Several items to a line is a shape the
|
|
68759
|
+
* list cannot virtualize — its render window and the room it holds for the
|
|
68760
|
+
* rows it does not draw both count one item per line — so it is for a set of
|
|
68761
|
+
* items the caller renders whole, not for a `<List.Items>` collection.
|
|
68762
|
+
* @param {string} [props.itemColumns]
|
|
68763
|
+
* The columns inside an ITEM: a `grid-template-columns` value each item fills
|
|
68764
|
+
* with its own children, a table whose cells line up down the list. Every item
|
|
68765
|
+
* becomes a subgrid row spanning all the columns, so a column is as wide as
|
|
68766
|
+
* the widest cell in it among the rows actually in the DOM — real column
|
|
68767
|
+
* sizing that stays right as the window moves. Rows of a table, then, where
|
|
68768
|
+
* `columns` above is a grid of items; the two cannot both be set.
|
|
68769
|
+
* @param {string} [props.alignX]
|
|
68770
|
+
* Where the items sit across the track — `alignX="center"` centres a
|
|
68771
|
+
* horizontal list's row of items inside a list wider than they are. Together
|
|
68772
|
+
* with `alignY`, `align` and `flexWrap`, this reaches the `<ul>` holding the
|
|
68773
|
+
* items rather than the frame drawn around it: the frame's only child is the
|
|
68774
|
+
* scroll box, which fills it and has nothing to arrange.
|
|
68775
|
+
* @param {boolean} [props.flexWrap]
|
|
68776
|
+
* Lets a horizontal list's items fall to the next line instead of running
|
|
68777
|
+
* past the edge — a row of choices under a `maxWidth`, say. Same caveat as
|
|
68778
|
+
* `columns` above: a line holding several items is not virtualizable.
|
|
68779
|
+
* @param {string} [props.overflow]
|
|
68780
|
+
* `"visible"` lets the items paint outside the list — a check in a row's
|
|
68781
|
+
* corner, a badge crossing the edge. A list clips by default, which is what
|
|
68782
|
+
* its rounded corners and its scroll box need, and the two cannot both be
|
|
68783
|
+
* true: asking for visible gives up the clipping, corners included.
|
|
68784
|
+
* @param {boolean} [props.itemTransition]
|
|
68785
|
+
* Names each row, so a change the application wraps in
|
|
68786
|
+
* `document.startViewTransition` is seen row by row — rows moving to their new
|
|
68787
|
+
* place, an arriving row appearing where it lands — instead of the list
|
|
68788
|
+
* cross-fading as a block. The rows are drawn inside the list's own picture,
|
|
68789
|
+
* so one coming from outside the visible part of the list is cut at the list's
|
|
68790
|
+
* edge like any other overflow. Requires nested view transition groups
|
|
68791
|
+
* (Chrome/Edge 140+): elsewhere the rows are left unnamed and the change
|
|
68792
|
+
* simply happens — but the browser still names the document root, so the page
|
|
68793
|
+
* cross-fades as a whole unless the application says otherwise, which is its
|
|
68794
|
+
* call and not the list's:
|
|
68795
|
+
* ```css
|
|
68796
|
+
* @supports not (view-transition-group: contain) {
|
|
68797
|
+
* :root { view-transition-name: none; }
|
|
68798
|
+
* }
|
|
68799
|
+
* ```
|
|
68800
|
+
* @param {false|((index: number) => any)} [props.renderSkeleton]
|
|
68801
|
+
* What a row on its way looks like — a row of the shape the real ones will
|
|
68802
|
+
* have, so nothing moves when they arrive. Used for the rows a `<List.Items>`
|
|
68803
|
+
* stands for and does not hold yet, and for the placeholder rows drawn while
|
|
68804
|
+
* the whole list is `loading`. Defaults to a bare `<List.Item skeleton>`.
|
|
68805
|
+
* @param {"skeleton"|"loader"|import("ignore:preact").ComponentChildren} [props.loadingFallback="skeleton"]
|
|
68806
|
+
* What to display in place of the items while `loading` — that is, while
|
|
68807
|
+
* there is nothing to show at all: `"skeleton"` renders
|
|
68808
|
+
* `loadingSkeletonCount` placeholder rows (look:
|
|
68809
|
+
* `renderSkeleton`), `"loader"` a single centered spinner, and
|
|
68810
|
+
* anything else is rendered as-is in a row of its own. A falsy value
|
|
68811
|
+
* displays nothing. A list that knows how many rows it will have has no use
|
|
68812
|
+
* for this — see `<List.Items count>`, whose not-yet-loaded rows are drawn
|
|
68813
|
+
* as skeletons in place, one per row, virtualized like the rest.
|
|
68814
|
+
* @param {number} [props.loadingSkeletonCount=3]
|
|
68815
|
+
* How many placeholder rows `loadingFallback="skeleton"` draws. `0` says the
|
|
68816
|
+
* list is already known to be empty: the empty `fallback` shows right away
|
|
68817
|
+
* rather than an empty frame, so nothing moves when the response arrives.
|
|
68818
|
+
* @param {"start"|"end"|number|{id: string, offset?: number}} [props.defaultScrolled="start"]
|
|
68819
|
+
* Where the list opens, after which the user owns the scroll. `"end"` is a
|
|
68820
|
+
* thread read backwards — the last rows are the ones to show, and the ones
|
|
68821
|
+
* asked for first. A number opens on that row of the collection. `{id,
|
|
68822
|
+
* offset}` — what `onScrolledChange` hands out — opens on a NAMED row,
|
|
68823
|
+
* `offset` pixels below where the row would land on its own: the row is asked
|
|
68824
|
+
* for by name (see the range's own `around`), then put back by MEASURING it,
|
|
68825
|
+
* so it lands where it was even if rows were inserted before it, and whatever
|
|
68826
|
+
* the screen it was saved on. `offset: 0` is where a `scrollIntoView()` puts
|
|
68827
|
+
* it — in front of the fixed bar the scroller gives room for, below the
|
|
68828
|
+
* sticky header and the group label the row lives under — so nothing of that
|
|
68829
|
+
* room has to be restated as a number by whoever asks.
|
|
68830
|
+
* @param {"start"|"end"|number|{id: string, offset?: number}} [props.scrolled]
|
|
68831
|
+
* The same, but held: the list goes back there every time this changes, even
|
|
68832
|
+
* after the user has scrolled — the caller owns where the list is (see
|
|
68833
|
+
* `defaultScrolled` for the uncontrolled form, and `open`/`defaultOpen`
|
|
68834
|
+
* elsewhere in navi for the same pair). When the named row turns out not to
|
|
68835
|
+
* exist — a message deleted since — the list opens at `defaultScrolled`
|
|
68836
|
+
* instead.
|
|
68837
|
+
*
|
|
68838
|
+
* In every form the list holds itself there while it is still finding out
|
|
68839
|
+
* how many rows there are and how tall one is, and lets go the moment the
|
|
68840
|
+
* user reaches for the list.
|
|
68841
|
+
* @param {(scrolled: {id: string, index: number, offset: number}) => void} [props.onScrolledChange]
|
|
68842
|
+
* Where the list is, as the user scrolls: the row at the top of the view and
|
|
68843
|
+
* how far below the place a row lands on its own (see `defaultScrolled`) it
|
|
68844
|
+
* starts. Keep it to come back to it
|
|
68845
|
+
* later through `scrolled`/`defaultScrolled` — an index would not do, since
|
|
68846
|
+
* rows get inserted while a list is being read.
|
|
68847
|
+
* @param {"self"|"parent"|"document"|Element|{current: Element}} [props.scroller="self"]
|
|
68848
|
+
* Which box scrolls. `"self"` gives the list a scroll box of its own;
|
|
68849
|
+
* `"parent"` makes it virtualize against the scrollable ancestor it lives in
|
|
68850
|
+
* (the page, a panel) — no scroll box nested inside another one, no height
|
|
68851
|
+
* to compute.
|
|
68852
|
+
*
|
|
68853
|
+
* `"parent"` finds that ancestor by measuring: the nearest one whose content
|
|
68854
|
+
* actually overflows it, the page if none does. Declaring `overflow` is not
|
|
68855
|
+
* enough to be picked (a box with `overflow-x: auto` that grows with its
|
|
68856
|
+
* content computes `overflow-y: auto` without ever scrolling), and the
|
|
68857
|
+
* answer is taken again as the geometry moves, so an ancestor that starts to
|
|
68858
|
+
* scroll once it fills up is picked up then. When that is still not the box
|
|
68859
|
+
* you mean, say so: `"document"`, or the element itself (a ref works) —
|
|
68860
|
+
* nothing is guessed then.
|
|
68861
|
+
* @param {boolean} [props.hoverWhileScrolling=false]
|
|
68862
|
+
* Whether the rows still answer the pointer while the scroller they live in
|
|
68863
|
+
* is moving. They do not by default: a scroll slides the rows under a
|
|
68864
|
+
* motionless pointer, so the browser reports a hover on each of them, and
|
|
68865
|
+
* the user asked to scroll, not to hover. The cost of taking them at face
|
|
68866
|
+
* value is paid by whatever hover triggers — a highlight elsewhere in the
|
|
68867
|
+
* tree, a prefetch, a map — at the worst moment, mid-scroll.
|
|
68868
|
+
*
|
|
68869
|
+
* Pass `true` for a list whose rows must stay live under the pointer while
|
|
68870
|
+
* it scrolls. The trade of the default is the mirror one: right after a
|
|
68871
|
+
* scroll, the row under the pointer lights up only once the pointer moves.
|
|
68872
|
+
* @param {boolean} [props.deselectable]
|
|
68873
|
+
* A single-select list allowed to hold nothing: the selected row, pressed
|
|
68874
|
+
* again, lets go. Without it the list is a radio group — a choice, once
|
|
68875
|
+
* made, moves to another row but never goes away. A `multiple` list toggles
|
|
68876
|
+
* its rows already.
|
|
68877
|
+
* @param {number} [props.maxLength]
|
|
68878
|
+
* How many items a `selectable multiple` list accepts — the same word, and
|
|
68879
|
+
* the same behaviour, as `maxLength` on a text field: a rule the list is
|
|
68880
|
+
* judged against, not a wall. A longer selection is allowed to exist and is
|
|
68881
|
+
* reported as invalid, which is what lets a value coming from elsewhere (an
|
|
68882
|
+
* API, a URL) be shown and then corrected.
|
|
68883
|
+
* @param {number} [props.maxLengthGuard]
|
|
68884
|
+
* The same limit, enforced as the selection is made: while the list holds as
|
|
68885
|
+
* many items as it accepts, the ones not selected go read-only — still
|
|
68886
|
+
* pointable, focusable and pressable, answering `"[max] max."` instead of
|
|
68887
|
+
* taking — and `uiAction` is not called. The selected ones stay takeable
|
|
68888
|
+
* back, so a selection that arrived too long can always be brought back
|
|
68889
|
+
* under the limit. Implies `maxLength` for validity.
|
|
68890
|
+
* @param {number} [props.parallelGuard=4]
|
|
68891
|
+
* How many runs the rows may have in flight at once, for a list whose rows
|
|
68892
|
+
* carry their own `action` (a button per row). While that many are out, every
|
|
68893
|
+
* row that is not running goes read-only and says how many it is waiting on;
|
|
68894
|
+
* the next press is possible again as soon as one comes back. `Infinity`
|
|
68895
|
+
* lifts it. Counts runs, not values — `maxLengthGuard` above is the one that
|
|
68896
|
+
* says how many things the selection may hold.
|
|
68897
|
+
* @param {boolean} [props.standalone]
|
|
68898
|
+
* This list answers for itself: it does not register with the control group
|
|
68899
|
+
* or picker around it, so its selection stays out of that value and nothing
|
|
68900
|
+
* coming down — a distributed value, a reset — reaches it. What a popup whose
|
|
68901
|
+
* one answer is spread over several lists says, so that none of them is taken
|
|
68902
|
+
* for the answer itself.
|
|
68903
|
+
*/
|
|
68904
|
+
const List = /*#__PURE__*/Object.assign(ListResolved, {
|
|
68905
|
+
Item: ListItem,
|
|
68906
|
+
Items: ListItems
|
|
68907
|
+
});
|
|
68900
68908
|
|
|
68901
68909
|
const PickerNaviTime = props => {
|
|
68902
68910
|
const Next = useNextResolver();
|
|
@@ -69829,7 +69837,7 @@ const PickerObject = props => {
|
|
|
69829
69837
|
"navi-state-shape": "object"
|
|
69830
69838
|
});
|
|
69831
69839
|
};
|
|
69832
|
-
const PickerObjectUI = asPickerOwnUI(() => {
|
|
69840
|
+
const PickerObjectUI = /*#__PURE__*/asPickerOwnUI(() => {
|
|
69833
69841
|
const {
|
|
69834
69842
|
value,
|
|
69835
69843
|
placeholder
|
|
@@ -69864,7 +69872,7 @@ const PickerArray = props => {
|
|
|
69864
69872
|
"navi-state-shape": "array"
|
|
69865
69873
|
});
|
|
69866
69874
|
};
|
|
69867
|
-
const PickerArrayUI = asPickerOwnUI(() => {
|
|
69875
|
+
const PickerArrayUI = /*#__PURE__*/asPickerOwnUI(() => {
|
|
69868
69876
|
const {
|
|
69869
69877
|
value,
|
|
69870
69878
|
placeholder,
|
|
@@ -69947,7 +69955,7 @@ const PickerColor = props => {
|
|
|
69947
69955
|
...props
|
|
69948
69956
|
});
|
|
69949
69957
|
};
|
|
69950
|
-
const PickerColorUI = asPickerOwnUI(() => {
|
|
69958
|
+
const PickerColorUI = /*#__PURE__*/asPickerOwnUI(() => {
|
|
69951
69959
|
const {
|
|
69952
69960
|
value,
|
|
69953
69961
|
placeholder
|
|
@@ -69971,7 +69979,7 @@ const PickerDate = props => {
|
|
|
69971
69979
|
type: "date"
|
|
69972
69980
|
});
|
|
69973
69981
|
};
|
|
69974
|
-
const PickerDateUI = asPickerOwnUI(props => {
|
|
69982
|
+
const PickerDateUI = /*#__PURE__*/asPickerOwnUI(props => {
|
|
69975
69983
|
const {
|
|
69976
69984
|
value,
|
|
69977
69985
|
placeholder
|
|
@@ -70003,7 +70011,7 @@ const PickerMonth = props => {
|
|
|
70003
70011
|
type: "month"
|
|
70004
70012
|
});
|
|
70005
70013
|
};
|
|
70006
|
-
const PickerMonthUI = asPickerOwnUI(props => {
|
|
70014
|
+
const PickerMonthUI = /*#__PURE__*/asPickerOwnUI(props => {
|
|
70007
70015
|
const {
|
|
70008
70016
|
value,
|
|
70009
70017
|
placeholder
|
|
@@ -70034,7 +70042,7 @@ const PickerWeek = props => {
|
|
|
70034
70042
|
type: "week"
|
|
70035
70043
|
});
|
|
70036
70044
|
};
|
|
70037
|
-
const PickerWeekUI = asPickerOwnUI(props => {
|
|
70045
|
+
const PickerWeekUI = /*#__PURE__*/asPickerOwnUI(props => {
|
|
70038
70046
|
const {
|
|
70039
70047
|
value,
|
|
70040
70048
|
placeholder
|
|
@@ -70065,7 +70073,7 @@ const PickerTime = props => {
|
|
|
70065
70073
|
type: "time"
|
|
70066
70074
|
});
|
|
70067
70075
|
};
|
|
70068
|
-
const PickerTimeUI = asPickerOwnUI(props => {
|
|
70076
|
+
const PickerTimeUI = /*#__PURE__*/asPickerOwnUI(props => {
|
|
70069
70077
|
const {
|
|
70070
70078
|
value,
|
|
70071
70079
|
placeholder
|
|
@@ -70096,7 +70104,7 @@ const PickerDuration = props => {
|
|
|
70096
70104
|
"navi-input-type": "duration"
|
|
70097
70105
|
});
|
|
70098
70106
|
};
|
|
70099
|
-
const PickerDurationUI = asPickerOwnUI(props => {
|
|
70107
|
+
const PickerDurationUI = /*#__PURE__*/asPickerOwnUI(props => {
|
|
70100
70108
|
const {
|
|
70101
70109
|
value,
|
|
70102
70110
|
placeholder
|
|
@@ -70126,7 +70134,7 @@ const PickerDatetime = props => {
|
|
|
70126
70134
|
type: "datetime-local"
|
|
70127
70135
|
});
|
|
70128
70136
|
};
|
|
70129
|
-
const PickerDatetimeUI = asPickerOwnUI(props => {
|
|
70137
|
+
const PickerDatetimeUI = /*#__PURE__*/asPickerOwnUI(props => {
|
|
70130
70138
|
const {
|
|
70131
70139
|
value,
|
|
70132
70140
|
placeholder
|
|
@@ -70155,7 +70163,7 @@ const PickerFile = props => {
|
|
|
70155
70163
|
...props
|
|
70156
70164
|
});
|
|
70157
70165
|
};
|
|
70158
|
-
const PickerFileUI = asPickerOwnUI(() => {
|
|
70166
|
+
const PickerFileUI = /*#__PURE__*/asPickerOwnUI(() => {
|
|
70159
70167
|
const {
|
|
70160
70168
|
value,
|
|
70161
70169
|
placeholder
|
|
@@ -71247,26 +71255,37 @@ const PickerFirstResolver = props => {
|
|
|
71247
71255
|
...props
|
|
71248
71256
|
});
|
|
71249
71257
|
};
|
|
71250
|
-
const
|
|
71251
|
-
|
|
71252
|
-
|
|
71253
|
-
|
|
71254
|
-
|
|
71255
|
-
|
|
71256
|
-
|
|
71257
|
-
|
|
71258
|
-
|
|
71259
|
-
|
|
71260
|
-
|
|
71261
|
-
|
|
71262
|
-
|
|
71263
|
-
|
|
71264
|
-
|
|
71265
|
-
|
|
71266
|
-
|
|
71267
|
-
|
|
71268
|
-
|
|
71269
|
-
|
|
71258
|
+
const PickerResolved = /*#__PURE__*/createComponentResolver([PickerFirstResolver, PickerPresetResolver, PickerConfirmResolver, PickerCustomResolver, PickerTypeResolver, PickerButton]);
|
|
71259
|
+
const PickerUI = /*#__PURE__*/Object.assign(PickerDefaultUI, {
|
|
71260
|
+
Date: PickerDateUI,
|
|
71261
|
+
Time: PickerTimeUI,
|
|
71262
|
+
Duration: PickerDurationUI,
|
|
71263
|
+
Week: PickerWeekUI,
|
|
71264
|
+
Datetime: PickerDatetimeUI,
|
|
71265
|
+
File: PickerFileUI,
|
|
71266
|
+
Color: PickerColorUI,
|
|
71267
|
+
Object: PickerObjectUI,
|
|
71268
|
+
Multiple: PickerArrayUI,
|
|
71269
|
+
PencilSvg,
|
|
71270
|
+
ChevronDownSvg: ChevronDownSvg$1,
|
|
71271
|
+
ClockSvg,
|
|
71272
|
+
DurationSvg,
|
|
71273
|
+
CalendarSvg,
|
|
71274
|
+
FileSvg,
|
|
71275
|
+
ColorSvg
|
|
71276
|
+
});
|
|
71277
|
+
|
|
71278
|
+
// Assembled in pure expressions rather than written onto Picker afterwards
|
|
71279
|
+
// (`Picker.Chip = PickerChip`): what createComponentResolver returns is an object
|
|
71280
|
+
// a bundler cannot see through, so a property assigned to it later is a side
|
|
71281
|
+
// effect it has to keep — and with it Picker, every UI and everything they
|
|
71282
|
+
// import, in a bundle that never renders a picker. The annotations say these
|
|
71283
|
+
// calls only create and return; an unused Picker then disappears whole.
|
|
71284
|
+
const Picker = /*#__PURE__*/Object.assign(PickerResolved, {
|
|
71285
|
+
Chip: PickerChip,
|
|
71286
|
+
Clear: PickerClear,
|
|
71287
|
+
UI: PickerUI
|
|
71288
|
+
});
|
|
71270
71289
|
|
|
71271
71290
|
installImportMetaCssBuild(import.meta);
|
|
71272
71291
|
const css$s = /* css */`@layer navi {
|
|
@@ -77243,7 +77262,7 @@ const useTableDragContextValue = ({
|
|
|
77243
77262
|
};
|
|
77244
77263
|
}, [grabTarget, canChangeColumnOrder]);
|
|
77245
77264
|
};
|
|
77246
|
-
const TableDragCloneContainer = forwardRef((props, ref) => {
|
|
77265
|
+
const TableDragCloneContainer = /*#__PURE__*/forwardRef((props, ref) => {
|
|
77247
77266
|
import.meta.css = [css$k, "@jsenv/navi/src/control/table/drag/table_drag.jsx"];
|
|
77248
77267
|
const {
|
|
77249
77268
|
tableId
|
|
@@ -77254,7 +77273,7 @@ const TableDragCloneContainer = forwardRef((props, ref) => {
|
|
|
77254
77273
|
"data-overlay-for": tableId
|
|
77255
77274
|
});
|
|
77256
77275
|
});
|
|
77257
|
-
const TableColumnDropPreview = forwardRef((props, ref) => {
|
|
77276
|
+
const TableColumnDropPreview = /*#__PURE__*/forwardRef((props, ref) => {
|
|
77258
77277
|
return jsxs("div", {
|
|
77259
77278
|
ref: ref,
|
|
77260
77279
|
className: "navi_table_column_drop_preview",
|
|
@@ -79350,7 +79369,7 @@ const css$f = /* css */`.navi_table_ui {
|
|
|
79350
79369
|
overflow: hidden;
|
|
79351
79370
|
}
|
|
79352
79371
|
`;
|
|
79353
|
-
const TableUI = forwardRef((props, ref) => {
|
|
79372
|
+
const TableUI = /*#__PURE__*/forwardRef((props, ref) => {
|
|
79354
79373
|
import.meta.css = [css$f, "@jsenv/navi/src/control/table/table_ui.jsx"];
|
|
79355
79374
|
const {
|
|
79356
79375
|
tableRef,
|