@jsenv/navi 0.29.362 → 0.29.363
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 +39 -40
- package/dist/dev/jsenv_navi.js.map +12 -10
- package/dist/jsenv_navi.js +39 -40
- package/dist/jsenv_navi.js.map +12 -10
- package/docs/popup_open.md +2 -1
- package/package.json +1 -1
package/dist/dev/jsenv_navi.js
CHANGED
|
@@ -9248,6 +9248,17 @@ const naviI18nFromValidityMessage = ({ key, params }) => {
|
|
|
9248
9248
|
return naviI18n(`constraint.${key}`, params);
|
|
9249
9249
|
};
|
|
9250
9250
|
|
|
9251
|
+
// The characters a ui state holds, for the rules that read a value as text
|
|
9252
|
+
// (length, pattern, number, email…). `undefined` and `null` both hold none:
|
|
9253
|
+
// `String(null)` would hand those rules the four letters "null" — a number
|
|
9254
|
+
// field cleared with `value={null}` then reported "must be a number".
|
|
9255
|
+
const uiStateAsText = (uiState) => {
|
|
9256
|
+
if (uiState === undefined || uiState === null) {
|
|
9257
|
+
return "";
|
|
9258
|
+
}
|
|
9259
|
+
return String(uiState);
|
|
9260
|
+
};
|
|
9261
|
+
|
|
9251
9262
|
/**
|
|
9252
9263
|
* https://developer.mozilla.org/en-US/docs/Web/HTML/Guides/Constraint_validation
|
|
9253
9264
|
*/
|
|
@@ -9314,8 +9325,7 @@ const REQUIRED_CONSTRAINT = {
|
|
|
9314
9325
|
return naviI18n("constraint.required.checkbox");
|
|
9315
9326
|
}
|
|
9316
9327
|
|
|
9317
|
-
const valueAsString =
|
|
9318
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
9328
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
9319
9329
|
if (valueAsString) {
|
|
9320
9330
|
return null;
|
|
9321
9331
|
}
|
|
@@ -9366,8 +9376,7 @@ const PATTERN_CONSTRAINT = {
|
|
|
9366
9376
|
if (!pattern) {
|
|
9367
9377
|
return null;
|
|
9368
9378
|
}
|
|
9369
|
-
const valueAsString =
|
|
9370
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
9379
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
9371
9380
|
if (!valueAsString) {
|
|
9372
9381
|
return null;
|
|
9373
9382
|
}
|
|
@@ -9402,8 +9411,7 @@ const TYPE_EMAIL_CONSTRAINT = {
|
|
|
9402
9411
|
if (type !== "email") {
|
|
9403
9412
|
return null;
|
|
9404
9413
|
}
|
|
9405
|
-
const valueAsString =
|
|
9406
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
9414
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
9407
9415
|
if (!valueAsString) {
|
|
9408
9416
|
return null;
|
|
9409
9417
|
}
|
|
@@ -9436,8 +9444,7 @@ const MIN_LENGTH_CONSTRAINT = {
|
|
|
9436
9444
|
if (minLength === undefined) {
|
|
9437
9445
|
return null;
|
|
9438
9446
|
}
|
|
9439
|
-
const valueAsString =
|
|
9440
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
9447
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
9441
9448
|
if (!valueAsString && !field.controlHostProps.required) {
|
|
9442
9449
|
return null;
|
|
9443
9450
|
}
|
|
@@ -9532,8 +9539,7 @@ const MAX_LENGTH_CONSTRAINT = {
|
|
|
9532
9539
|
if (maxLength === undefined) {
|
|
9533
9540
|
return null;
|
|
9534
9541
|
}
|
|
9535
|
-
const valueAsString =
|
|
9536
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
9542
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
9537
9543
|
if (!valueAsString) {
|
|
9538
9544
|
return null;
|
|
9539
9545
|
}
|
|
@@ -9574,8 +9580,7 @@ const TYPE_NUMBER_CONSTRAINT = {
|
|
|
9574
9580
|
if (!isNumberInput(type, naviType)) {
|
|
9575
9581
|
return null;
|
|
9576
9582
|
}
|
|
9577
|
-
const valueAsString =
|
|
9578
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
9583
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
9579
9584
|
if (!valueAsString) {
|
|
9580
9585
|
return null;
|
|
9581
9586
|
}
|
|
@@ -9640,8 +9645,7 @@ const MIN_CONSTRAINT = {
|
|
|
9640
9645
|
}
|
|
9641
9646
|
const type = field.controlHostProps.type;
|
|
9642
9647
|
const naviInputType = field.controlHostProps["navi-input-type"];
|
|
9643
|
-
const valueAsString =
|
|
9644
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
9648
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
9645
9649
|
if (!valueAsString) {
|
|
9646
9650
|
return null;
|
|
9647
9651
|
}
|
|
@@ -9740,8 +9744,7 @@ const MAX_CONSTRAINT = {
|
|
|
9740
9744
|
}
|
|
9741
9745
|
const type = field.controlHostProps.type;
|
|
9742
9746
|
const naviInputType = field.controlHostProps["navi-input-type"];
|
|
9743
|
-
const valueAsString =
|
|
9744
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
9747
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
9745
9748
|
if (!valueAsString) {
|
|
9746
9749
|
return null;
|
|
9747
9750
|
}
|
|
@@ -9874,8 +9877,7 @@ const STEP_CONSTRAINT = {
|
|
|
9874
9877
|
return null;
|
|
9875
9878
|
}
|
|
9876
9879
|
const stepString = String(stepRaw);
|
|
9877
|
-
const valueAsString =
|
|
9878
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
9880
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
9879
9881
|
if (!valueAsString) {
|
|
9880
9882
|
return null;
|
|
9881
9883
|
}
|
|
@@ -12824,8 +12826,7 @@ const DISPLAYABLE_CONSTRAINT = {
|
|
|
12824
12826
|
if (!isConstraintAttributeOn(displayable)) {
|
|
12825
12827
|
return null;
|
|
12826
12828
|
}
|
|
12827
|
-
const valueAsString =
|
|
12828
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
12829
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
12829
12830
|
const maxStackedMarksAttribute =
|
|
12830
12831
|
field.controlHostProps["data-max-stacked-marks"];
|
|
12831
12832
|
const result = DISPLAYABLE_RULE.applyOn(true, valueAsString, {
|
|
@@ -12866,8 +12867,7 @@ const MAX_LINE_BREAKS_CONSTRAINT = {
|
|
|
12866
12867
|
if (isNaN(maxLineBreaks)) {
|
|
12867
12868
|
return null;
|
|
12868
12869
|
}
|
|
12869
|
-
const valueAsString =
|
|
12870
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
12870
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
12871
12871
|
const result = MAX_LINE_BREAKS_RULE.applyOn(maxLineBreaks, valueAsString);
|
|
12872
12872
|
if (!result) {
|
|
12873
12873
|
return null;
|
|
@@ -12896,8 +12896,7 @@ const NO_EMOJI_CONSTRAINT = {
|
|
|
12896
12896
|
if (!isConstraintAttributeOn(noEmoji)) {
|
|
12897
12897
|
return null;
|
|
12898
12898
|
}
|
|
12899
|
-
const valueAsString =
|
|
12900
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
12899
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
12901
12900
|
const result = NO_EMOJI_RULE.applyOn(true, valueAsString);
|
|
12902
12901
|
if (!result) {
|
|
12903
12902
|
return null;
|
|
@@ -12911,8 +12910,7 @@ const MIN_LOWER_LETTER_CONSTRAINT = {
|
|
|
12911
12910
|
name: "min_lower_letter",
|
|
12912
12911
|
messageAttribute: "data-min-lower-letter-message",
|
|
12913
12912
|
check: (field) => {
|
|
12914
|
-
const valueAsString =
|
|
12915
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
12913
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
12916
12914
|
const required = field.controlHostProps.required;
|
|
12917
12915
|
if (!valueAsString && !required) {
|
|
12918
12916
|
return "";
|
|
@@ -12957,8 +12955,7 @@ const MIN_UPPER_LETTER_CONSTRAINT = {
|
|
|
12957
12955
|
name: "min_upper_letter",
|
|
12958
12956
|
messageAttribute: "data-min-upper-letter-message",
|
|
12959
12957
|
check: (field) => {
|
|
12960
|
-
const valueAsString =
|
|
12961
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
12958
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
12962
12959
|
const required = field.controlHostProps.required;
|
|
12963
12960
|
if (!valueAsString && !required) {
|
|
12964
12961
|
return null;
|
|
@@ -12994,8 +12991,7 @@ const MIN_DIGIT_CONSTRAINT = {
|
|
|
12994
12991
|
name: "min_digit",
|
|
12995
12992
|
messageAttribute: "data-min-digit-message",
|
|
12996
12993
|
check: (field) => {
|
|
12997
|
-
const valueAsString =
|
|
12998
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
12994
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
12999
12995
|
const required = field.controlHostProps.required;
|
|
13000
12996
|
if (!valueAsString && !required) {
|
|
13001
12997
|
return null;
|
|
@@ -13031,8 +13027,7 @@ const MIN_SPECIAL_CHAR_CONSTRAINT = {
|
|
|
13031
13027
|
name: "min_special_char",
|
|
13032
13028
|
messageAttribute: "data-min-special-char-message",
|
|
13033
13029
|
check: (field) => {
|
|
13034
|
-
const valueAsString =
|
|
13035
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
13030
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
13036
13031
|
const required = field.controlHostProps.required;
|
|
13037
13032
|
if (!valueAsString && !required) {
|
|
13038
13033
|
return null;
|
|
@@ -13149,8 +13144,7 @@ const SAME_AS_CONSTRAINT = {
|
|
|
13149
13144
|
// Reference field is empty — nothing to compare against yet.
|
|
13150
13145
|
return null;
|
|
13151
13146
|
}
|
|
13152
|
-
const valueAsString =
|
|
13153
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
13147
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
13154
13148
|
if (valueAsString === otherFieldValue) {
|
|
13155
13149
|
return null;
|
|
13156
13150
|
}
|
|
@@ -13191,8 +13185,7 @@ CONSTRAINT_ATTRIBUTE_SET.add("data-same-as");
|
|
|
13191
13185
|
|
|
13192
13186
|
|
|
13193
13187
|
const applyRule = (field) => {
|
|
13194
|
-
const valueAsString =
|
|
13195
|
-
field.uiState === undefined ? "" : String(field.uiState);
|
|
13188
|
+
const valueAsString = uiStateAsText(field.uiState);
|
|
13196
13189
|
return SINGLE_SPACE_RULE.applyOn(true, valueAsString);
|
|
13197
13190
|
};
|
|
13198
13191
|
|
|
@@ -37479,9 +37472,9 @@ const getInvalidCharsMessage = (
|
|
|
37479
37472
|
uiState,
|
|
37480
37473
|
{ charClass, messageKey, uiStateNow },
|
|
37481
37474
|
) => {
|
|
37482
|
-
const str =
|
|
37475
|
+
const str = uiStateAsText(uiState);
|
|
37483
37476
|
if (compileCharClassAnchored(charClass).test(str)) return null;
|
|
37484
|
-
const strNow =
|
|
37477
|
+
const strNow = uiStateAsText(uiStateNow);
|
|
37485
37478
|
if (
|
|
37486
37479
|
countCharsOutsideClass(str, charClass) <=
|
|
37487
37480
|
countCharsOutsideClass(strNow, charClass)
|
|
@@ -37494,9 +37487,9 @@ const getInvalidCharsMessage = (
|
|
|
37494
37487
|
// Paste / set: truncate what the gesture adds beyond the limit.
|
|
37495
37488
|
const getLengthOverflowResult = (uiState, { maxLength, uiStateNow }) => {
|
|
37496
37489
|
if (maxLength === undefined) return null;
|
|
37497
|
-
const str =
|
|
37490
|
+
const str = uiStateAsText(uiState);
|
|
37498
37491
|
if (str.length <= maxLength) return null;
|
|
37499
|
-
const strNow =
|
|
37492
|
+
const strNow = uiStateAsText(uiStateNow);
|
|
37500
37493
|
if (str.length <= strNow.length) return null;
|
|
37501
37494
|
return {
|
|
37502
37495
|
fixedValue: str.slice(0, maxLength),
|
|
@@ -65237,6 +65230,12 @@ const PickerCustom = props => {
|
|
|
65237
65230
|
// PickerNative takes.
|
|
65238
65231
|
pickerProps.resetOnError = true;
|
|
65239
65232
|
}
|
|
65233
|
+
if (pickerProps.resetOnAbort === undefined) {
|
|
65234
|
+
// Same reasoning for an action the app abandons (an AbortError, e.g. a
|
|
65235
|
+
// verification step the user dismissed): the popup is already closed, so
|
|
65236
|
+
// the abandoned value rolls back instead of staying selected in the list.
|
|
65237
|
+
pickerProps.resetOnAbort = true;
|
|
65238
|
+
}
|
|
65240
65239
|
// ref
|
|
65241
65240
|
const popupRef = useRef(null);
|
|
65242
65241
|
popupProps.ref = popupRef;
|