@fieldia/core 0.19.1 → 0.21.0
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/package.json +1 -1
- package/schema/page.schema.json +946 -210
- package/src/index.d.mts +2 -1
- package/src/index.d.ts +2 -1
- package/src/index.js +5 -1
- package/src/index.js.map +1 -1
- package/src/index.mjs +2 -1
- package/src/index.mjs.map +1 -1
- package/src/lib/expression/parser.js +4 -4
- package/src/lib/expression/parser.js.map +1 -1
- package/src/lib/expression/parser.mjs +5 -5
- package/src/lib/expression/parser.mjs.map +1 -1
- package/src/lib/expression/tokenizer.d.mts +12 -0
- package/src/lib/expression/tokenizer.d.ts +12 -0
- package/src/lib/expression/tokenizer.js +21 -12
- package/src/lib/expression/tokenizer.js.map +1 -1
- package/src/lib/expression/tokenizer.mjs +20 -12
- package/src/lib/expression/tokenizer.mjs.map +1 -1
- package/src/lib/format/field.d.mts +16 -0
- package/src/lib/format/field.d.ts +16 -0
- package/src/lib/format/field.js +11 -1
- package/src/lib/format/field.js.map +1 -1
- package/src/lib/format/field.mjs +11 -1
- package/src/lib/format/field.mjs.map +1 -1
- package/src/lib/format/head-checks.d.mts +40 -0
- package/src/lib/format/head-checks.d.ts +40 -0
- package/src/lib/format/head-checks.js +172 -0
- package/src/lib/format/head-checks.js.map +1 -0
- package/src/lib/format/head-checks.mjs +167 -0
- package/src/lib/format/head-checks.mjs.map +1 -0
- package/src/lib/format/layout.d.mts +6485 -1447
- package/src/lib/format/layout.d.ts +6485 -1447
- package/src/lib/format/layout.js +106 -2
- package/src/lib/format/layout.js.map +1 -1
- package/src/lib/format/layout.mjs +105 -1
- package/src/lib/format/layout.mjs.map +1 -1
- package/src/lib/format/layout.types.d.mts +7 -1
- package/src/lib/format/layout.types.d.ts +7 -1
- package/src/lib/format/page.d.mts +1502 -162
- package/src/lib/format/page.d.ts +1502 -162
- package/src/lib/format/page.js +3 -0
- package/src/lib/format/page.js.map +1 -1
- package/src/lib/format/page.mjs +3 -0
- package/src/lib/format/page.mjs.map +1 -1
- package/src/lib/format/pattern.d.mts +10 -0
- package/src/lib/format/pattern.d.ts +10 -0
- package/src/lib/format/pattern.js +33 -0
- package/src/lib/format/pattern.js.map +1 -0
- package/src/lib/format/pattern.mjs +30 -0
- package/src/lib/format/pattern.mjs.map +1 -0
- package/src/lib/format/picker-options.d.mts +22 -0
- package/src/lib/format/picker-options.d.ts +22 -0
- package/src/lib/format/picker-options.js +50 -0
- package/src/lib/format/picker-options.js.map +1 -0
- package/src/lib/format/picker-options.mjs +46 -0
- package/src/lib/format/picker-options.mjs.map +1 -0
- package/src/lib/format/references.d.mts +9 -0
- package/src/lib/format/references.d.ts +9 -0
- package/src/lib/format/references.js +96 -1
- package/src/lib/format/references.js.map +1 -1
- package/src/lib/format/references.mjs +96 -1
- package/src/lib/format/references.mjs.map +1 -1
- package/src/lib/format/section-checks.d.mts +10 -0
- package/src/lib/format/section-checks.d.ts +10 -0
- package/src/lib/format/section-checks.js +35 -0
- package/src/lib/format/section-checks.js.map +1 -0
- package/src/lib/format/section-checks.mjs +31 -0
- package/src/lib/format/section-checks.mjs.map +1 -0
- package/src/lib/format/translate.js +14 -4
- package/src/lib/format/translate.js.map +1 -1
- package/src/lib/format/translate.mjs +14 -4
- package/src/lib/format/translate.mjs.map +1 -1
- package/src/lib/record/check.d.mts +13 -3
- package/src/lib/record/check.d.ts +13 -3
- package/src/lib/record/check.js +87 -17
- package/src/lib/record/check.js.map +1 -1
- package/src/lib/record/check.mjs +85 -17
- package/src/lib/record/check.mjs.map +1 -1
- package/src/lib/record/filter.js +14 -2
- package/src/lib/record/filter.js.map +1 -1
- package/src/lib/record/filter.mjs +14 -2
- package/src/lib/record/filter.mjs.map +1 -1
- package/src/lib/record/form.d.mts +56 -2
- package/src/lib/record/form.d.ts +56 -2
- package/src/lib/record/form.js +293 -26
- package/src/lib/record/form.js.map +1 -1
- package/src/lib/record/form.mjs +295 -28
- package/src/lib/record/form.mjs.map +1 -1
- package/src/lib/record/input-rules.d.mts +277 -0
- package/src/lib/record/input-rules.d.ts +277 -0
- package/src/lib/record/input-rules.js +724 -0
- package/src/lib/record/input-rules.js.map +1 -0
- package/src/lib/record/input-rules.mjs +705 -0
- package/src/lib/record/input-rules.mjs.map +1 -0
- package/src/lib/record/inputs.d.mts +25 -0
- package/src/lib/record/inputs.d.ts +25 -0
- package/src/lib/record/inputs.js +135 -9
- package/src/lib/record/inputs.js.map +1 -1
- package/src/lib/record/inputs.mjs +131 -9
- package/src/lib/record/inputs.mjs.map +1 -1
- package/src/lib/record/locales/ar.js +13 -2
- package/src/lib/record/locales/ar.js.map +1 -1
- package/src/lib/record/locales/ar.mjs +13 -2
- package/src/lib/record/locales/ar.mjs.map +1 -1
- package/src/lib/record/locales/de.js +13 -2
- package/src/lib/record/locales/de.js.map +1 -1
- package/src/lib/record/locales/de.mjs +13 -2
- package/src/lib/record/locales/de.mjs.map +1 -1
- package/src/lib/record/locales/fr.js +13 -2
- package/src/lib/record/locales/fr.js.map +1 -1
- package/src/lib/record/locales/fr.mjs +13 -2
- package/src/lib/record/locales/fr.mjs.map +1 -1
- package/src/lib/record/memory-data-source.d.mts +7 -0
- package/src/lib/record/memory-data-source.d.ts +7 -0
- package/src/lib/record/memory-data-source.js +24 -2
- package/src/lib/record/memory-data-source.js.map +1 -1
- package/src/lib/record/memory-data-source.mjs +24 -2
- package/src/lib/record/memory-data-source.mjs.map +1 -1
- package/src/lib/record/messages.d.mts +22 -0
- package/src/lib/record/messages.d.ts +22 -0
- package/src/lib/record/messages.js +13 -2
- package/src/lib/record/messages.js.map +1 -1
- package/src/lib/record/messages.mjs +13 -2
- package/src/lib/record/messages.mjs.map +1 -1
- package/src/lib/record/rules.js +3 -1
- package/src/lib/record/rules.js.map +1 -1
- package/src/lib/record/rules.mjs +3 -1
- package/src/lib/record/rules.mjs.map +1 -1
- package/src/lib/record/run.d.mts +10 -2
- package/src/lib/record/run.d.ts +10 -2
- package/src/lib/record/run.js +8 -1
- package/src/lib/record/run.js.map +1 -1
- package/src/lib/record/run.mjs +8 -1
- package/src/lib/record/run.mjs.map +1 -1
- package/src/lib/record/search.d.mts +8 -1
- package/src/lib/record/search.d.ts +8 -1
- package/src/lib/record/search.js +28 -8
- package/src/lib/record/search.js.map +1 -1
- package/src/lib/record/search.mjs +28 -8
- package/src/lib/record/search.mjs.map +1 -1
- package/src/lib/record/structures.d.mts +8 -3
- package/src/lib/record/structures.d.ts +8 -3
- package/src/lib/record/structures.js +51 -7
- package/src/lib/record/structures.js.map +1 -1
- package/src/lib/record/structures.mjs +48 -6
- package/src/lib/record/structures.mjs.map +1 -1
- package/src/lib/record/values.d.mts +4 -0
- package/src/lib/record/values.d.ts +4 -0
- package/src/lib/record/values.js.map +1 -1
- package/src/lib/record/values.mjs.map +1 -1
- package/src/runtime.d.mts +7 -3
- package/src/runtime.d.ts +7 -3
- package/src/runtime.js +31 -1
- package/src/runtime.js.map +1 -1
- package/src/runtime.mjs +5 -2
- package/src/runtime.mjs.map +1 -1
package/src/lib/record/search.js
CHANGED
|
@@ -4,36 +4,56 @@ exports.suggestions = suggestions;
|
|
|
4
4
|
exports.facetsToFilter = facetsToFilter;
|
|
5
5
|
exports.groupByFields = groupByFields;
|
|
6
6
|
const messages_1 = require("./messages");
|
|
7
|
+
const input_rules_1 = require("./input-rules");
|
|
7
8
|
const TEXT = new Set(['char', 'text', 'html']);
|
|
8
9
|
const NUMBER = new Set(['integer', 'float', 'monetary']);
|
|
9
10
|
const LINK = new Set(['many2one', 'many2many']);
|
|
11
|
+
/** What a phone number is typed with: digits in any script, spaces, a plus and ( ) . - — no letters. */
|
|
12
|
+
const PHONE_LIKE = /^[+\d\s().\-\u0660-\u0669\u06f0-\u06f9\uff10-\uff19]+$/;
|
|
10
13
|
/**
|
|
11
14
|
* The searches the typed text can be: text looked for in each text field, a
|
|
12
15
|
* choice whose label it matches, a number where it is one, a link by its
|
|
13
16
|
* record's name. Only the list's search fields, the columns unless it says.
|
|
17
|
+
*
|
|
18
|
+
* What is typed is read as every box reads it (FIELDIA INPUT RULES): digits in
|
|
19
|
+
* any script are 0-9, direction marks are dropped, and a number is read in the
|
|
20
|
+
* page's language (`locale`) — its grouping and decimal marks, never hex or an
|
|
21
|
+
* exponent. A column the list shows as a phone (`cells.<field>.widget: "phone"`)
|
|
22
|
+
* is searched by the typed digits in order, whatever the spacing: "3334400",
|
|
23
|
+
* "+٢٠ ٤٠ ٣٣٣ ٤٤٠٠" and "333 4400" all find "+20 40 333 4400".
|
|
14
24
|
*/
|
|
15
|
-
function suggestions(typed, page, list, words = { searchFor: 'Search {field} for: {text}' }) {
|
|
25
|
+
function suggestions(typed, page, list, words = { searchFor: 'Search {field} for: {text}' }, locale = 'en') {
|
|
16
26
|
const text = typed.trim();
|
|
17
27
|
if (!text)
|
|
18
28
|
return [];
|
|
29
|
+
/** The typed text as it is searched for: digits as 0-9, no direction marks. */
|
|
30
|
+
const sought = (0, input_rules_1.foldDigits)((0, input_rules_1.stripMarks)(text)).trim();
|
|
19
31
|
const found = [];
|
|
20
32
|
for (const field of list.searchFields ?? list.columns) {
|
|
21
33
|
const def = page.fields[field];
|
|
22
34
|
if (!def)
|
|
23
35
|
continue;
|
|
24
36
|
const say = (op, value, valueLabel, label) => found.push({ field, fieldLabel: def.label, op, value, valueLabel, label: label ?? (0, messages_1.fill)(words.searchFor, { field: def.label, text }) });
|
|
25
|
-
if (
|
|
26
|
-
|
|
37
|
+
if (list.cells?.[field]?.widget === 'phone' && TEXT.has(def.type)) {
|
|
38
|
+
// Its digits in order, whatever lies between them: a server's ilike finds them with % between.
|
|
39
|
+
const digits = sought.replace(/\D/g, '');
|
|
40
|
+
if (PHONE_LIKE.test((0, input_rules_1.stripMarks)(text)) && digits)
|
|
41
|
+
say('ilike', digits.split('').join('%'), text);
|
|
42
|
+
else
|
|
43
|
+
say('ilike', sought, text);
|
|
44
|
+
}
|
|
45
|
+
else if (TEXT.has(def.type) || LINK.has(def.type))
|
|
46
|
+
say('ilike', sought, text);
|
|
27
47
|
else if (def.type === 'selection') {
|
|
28
|
-
const
|
|
48
|
+
const wanted = (0, input_rules_1.foldForSearch)(text);
|
|
29
49
|
for (const option of def.options)
|
|
30
|
-
if (option.label
|
|
50
|
+
if ((0, input_rules_1.foldForSearch)(option.label).includes(wanted))
|
|
31
51
|
say('=', option.value, option.label, `${def.label}: ${option.label}`);
|
|
32
52
|
}
|
|
33
53
|
else if (NUMBER.has(def.type)) {
|
|
34
|
-
const
|
|
35
|
-
if (
|
|
36
|
-
say('=',
|
|
54
|
+
const read = (0, input_rules_1.readNumber)(text, locale);
|
|
55
|
+
if (read.ok && read.value !== null)
|
|
56
|
+
say('=', read.value, text);
|
|
37
57
|
}
|
|
38
58
|
}
|
|
39
59
|
// Text fields first, then the choices, then the links: the order a person looks in.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/search.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,34 +1,54 @@
|
|
|
1
1
|
import { fill } from './messages.mjs';
|
|
2
|
+
import { foldDigits, foldForSearch, readNumber, stripMarks } from './input-rules.mjs';
|
|
2
3
|
const TEXT = new Set(['char', 'text', 'html']);
|
|
3
4
|
const NUMBER = new Set(['integer', 'float', 'monetary']);
|
|
4
5
|
const LINK = new Set(['many2one', 'many2many']);
|
|
6
|
+
/** What a phone number is typed with: digits in any script, spaces, a plus and ( ) . - — no letters. */
|
|
7
|
+
const PHONE_LIKE = /^[+\d\s().\-\u0660-\u0669\u06f0-\u06f9\uff10-\uff19]+$/;
|
|
5
8
|
/**
|
|
6
9
|
* The searches the typed text can be: text looked for in each text field, a
|
|
7
10
|
* choice whose label it matches, a number where it is one, a link by its
|
|
8
11
|
* record's name. Only the list's search fields, the columns unless it says.
|
|
12
|
+
*
|
|
13
|
+
* What is typed is read as every box reads it (FIELDIA INPUT RULES): digits in
|
|
14
|
+
* any script are 0-9, direction marks are dropped, and a number is read in the
|
|
15
|
+
* page's language (`locale`) — its grouping and decimal marks, never hex or an
|
|
16
|
+
* exponent. A column the list shows as a phone (`cells.<field>.widget: "phone"`)
|
|
17
|
+
* is searched by the typed digits in order, whatever the spacing: "3334400",
|
|
18
|
+
* "+٢٠ ٤٠ ٣٣٣ ٤٤٠٠" and "333 4400" all find "+20 40 333 4400".
|
|
9
19
|
*/
|
|
10
|
-
export function suggestions(typed, page, list, words = { searchFor: 'Search {field} for: {text}' }) {
|
|
20
|
+
export function suggestions(typed, page, list, words = { searchFor: 'Search {field} for: {text}' }, locale = 'en') {
|
|
11
21
|
const text = typed.trim();
|
|
12
22
|
if (!text)
|
|
13
23
|
return [];
|
|
24
|
+
/** The typed text as it is searched for: digits as 0-9, no direction marks. */
|
|
25
|
+
const sought = foldDigits(stripMarks(text)).trim();
|
|
14
26
|
const found = [];
|
|
15
27
|
for (const field of list.searchFields ?? list.columns) {
|
|
16
28
|
const def = page.fields[field];
|
|
17
29
|
if (!def)
|
|
18
30
|
continue;
|
|
19
31
|
const say = (op, value, valueLabel, label) => found.push({ field, fieldLabel: def.label, op, value, valueLabel, label: label ?? fill(words.searchFor, { field: def.label, text }) });
|
|
20
|
-
if (
|
|
21
|
-
|
|
32
|
+
if (list.cells?.[field]?.widget === 'phone' && TEXT.has(def.type)) {
|
|
33
|
+
// Its digits in order, whatever lies between them: a server's ilike finds them with % between.
|
|
34
|
+
const digits = sought.replace(/\D/g, '');
|
|
35
|
+
if (PHONE_LIKE.test(stripMarks(text)) && digits)
|
|
36
|
+
say('ilike', digits.split('').join('%'), text);
|
|
37
|
+
else
|
|
38
|
+
say('ilike', sought, text);
|
|
39
|
+
}
|
|
40
|
+
else if (TEXT.has(def.type) || LINK.has(def.type))
|
|
41
|
+
say('ilike', sought, text);
|
|
22
42
|
else if (def.type === 'selection') {
|
|
23
|
-
const
|
|
43
|
+
const wanted = foldForSearch(text);
|
|
24
44
|
for (const option of def.options)
|
|
25
|
-
if (option.label
|
|
45
|
+
if (foldForSearch(option.label).includes(wanted))
|
|
26
46
|
say('=', option.value, option.label, `${def.label}: ${option.label}`);
|
|
27
47
|
}
|
|
28
48
|
else if (NUMBER.has(def.type)) {
|
|
29
|
-
const
|
|
30
|
-
if (
|
|
31
|
-
say('=',
|
|
49
|
+
const read = readNumber(text, locale);
|
|
50
|
+
if (read.ok && read.value !== null)
|
|
51
|
+
say('=', read.value, text);
|
|
32
52
|
}
|
|
33
53
|
}
|
|
34
54
|
// Text fields first, then the choices, then the links: the order a person looks in.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/search.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"search.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,10 +5,15 @@ import type { Value } from './values.mjs';
|
|
|
5
5
|
/**
|
|
6
6
|
* What a structure's widget asks of its answer beyond Required: an address
|
|
7
7
|
* (`json.address`) its parts in `options.requiredParts` filled — the first
|
|
8
|
-
* missing one named — and
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* missing one named — and its postcode of its country's shape where that is
|
|
9
|
+
* known; and a table of lines or a repeating group as few lines as
|
|
10
|
+
* `options.min` and as many as `options.max`, once it has any. Undefined when
|
|
11
|
+
* it keeps them, or when there is nothing to check.
|
|
11
12
|
*/
|
|
12
13
|
/** An address's parts, in the order its boxes and its messages name them. */
|
|
13
14
|
export declare const ADDRESS_PARTS: readonly ["street", "line2", "city", "region", "postcode", "country"];
|
|
15
|
+
/** A postcode as it is kept: digits in any script as 0-9, no direction marks, no spaces at its ends. */
|
|
16
|
+
export declare const settledPostcode: (text: string) => string;
|
|
17
|
+
/** Whether a postcode is of its country's shape: null when the country's shape is not known, or there is no postcode. */
|
|
18
|
+
export declare function postcodeFits(country: unknown, postcode: unknown): boolean | null;
|
|
14
19
|
export declare function checkStructure(field: Field, node: FieldNode, value: Value | undefined, messages: Messages): string | undefined;
|
|
@@ -5,10 +5,15 @@ import type { Value } from './values';
|
|
|
5
5
|
/**
|
|
6
6
|
* What a structure's widget asks of its answer beyond Required: an address
|
|
7
7
|
* (`json.address`) its parts in `options.requiredParts` filled — the first
|
|
8
|
-
* missing one named — and
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* missing one named — and its postcode of its country's shape where that is
|
|
9
|
+
* known; and a table of lines or a repeating group as few lines as
|
|
10
|
+
* `options.min` and as many as `options.max`, once it has any. Undefined when
|
|
11
|
+
* it keeps them, or when there is nothing to check.
|
|
11
12
|
*/
|
|
12
13
|
/** An address's parts, in the order its boxes and its messages name them. */
|
|
13
14
|
export declare const ADDRESS_PARTS: readonly ["street", "line2", "city", "region", "postcode", "country"];
|
|
15
|
+
/** A postcode as it is kept: digits in any script as 0-9, no direction marks, no spaces at its ends. */
|
|
16
|
+
export declare const settledPostcode: (text: string) => string;
|
|
17
|
+
/** Whether a postcode is of its country's shape: null when the country's shape is not known, or there is no postcode. */
|
|
18
|
+
export declare function postcodeFits(country: unknown, postcode: unknown): boolean | null;
|
|
14
19
|
export declare function checkStructure(field: Field, node: FieldNode, value: Value | undefined, messages: Messages): string | undefined;
|
|
@@ -1,17 +1,54 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ADDRESS_PARTS = void 0;
|
|
3
|
+
exports.settledPostcode = exports.ADDRESS_PARTS = void 0;
|
|
4
|
+
exports.postcodeFits = postcodeFits;
|
|
4
5
|
exports.checkStructure = checkStructure;
|
|
6
|
+
const input_rules_1 = require("./input-rules");
|
|
5
7
|
const messages_1 = require("./messages");
|
|
6
8
|
/**
|
|
7
9
|
* What a structure's widget asks of its answer beyond Required: an address
|
|
8
10
|
* (`json.address`) its parts in `options.requiredParts` filled — the first
|
|
9
|
-
* missing one named — and
|
|
10
|
-
*
|
|
11
|
-
*
|
|
11
|
+
* missing one named — and its postcode of its country's shape where that is
|
|
12
|
+
* known; and a table of lines or a repeating group as few lines as
|
|
13
|
+
* `options.min` and as many as `options.max`, once it has any. Undefined when
|
|
14
|
+
* it keeps them, or when there is nothing to check.
|
|
12
15
|
*/
|
|
13
16
|
/** An address's parts, in the order its boxes and its messages name them. */
|
|
14
17
|
exports.ADDRESS_PARTS = ['street', 'line2', 'city', 'region', 'postcode', 'country'];
|
|
18
|
+
/**
|
|
19
|
+
* A postcode's shape by its country, where it is known: how many digits, and
|
|
20
|
+
* one as the country writes it. Egypt's, Saudi Arabia's, Kuwait's and
|
|
21
|
+
* Jordan's have five; Bahrain's three or four; Oman's three. Others are not
|
|
22
|
+
* checked.
|
|
23
|
+
*/
|
|
24
|
+
const POSTCODES = {
|
|
25
|
+
EG: { least: 5, most: 5, example: '11511' },
|
|
26
|
+
SA: { least: 5, most: 5, example: '12271' },
|
|
27
|
+
KW: { least: 5, most: 5, example: '13001' },
|
|
28
|
+
JO: { least: 5, most: 5, example: '11118' },
|
|
29
|
+
BH: { least: 3, most: 4, example: '317' },
|
|
30
|
+
OM: { least: 3, most: 3, example: '112' },
|
|
31
|
+
};
|
|
32
|
+
/** A postcode as it is kept: digits in any script as 0-9, no direction marks, no spaces at its ends. */
|
|
33
|
+
const settledPostcode = (text) => (0, input_rules_1.foldDigits)((0, input_rules_1.stripMarks)(text)).trim();
|
|
34
|
+
exports.settledPostcode = settledPostcode;
|
|
35
|
+
/** Whether a postcode is of its country's shape: null when the country's shape is not known, or there is no postcode. */
|
|
36
|
+
function postcodeFits(country, postcode) {
|
|
37
|
+
const shape = typeof country === 'string' ? POSTCODES[country.toUpperCase()] : undefined;
|
|
38
|
+
if (!shape || typeof postcode !== 'string' || !postcode.trim())
|
|
39
|
+
return null;
|
|
40
|
+
const digits = (0, exports.settledPostcode)(postcode);
|
|
41
|
+
return /^[0-9]+$/.test(digits) && digits.length >= shape.least && digits.length <= shape.most;
|
|
42
|
+
}
|
|
43
|
+
/** A country's name in a language, by its code: Egypt, مصر, Égypte, Ägypten. */
|
|
44
|
+
function countryName(code, locale) {
|
|
45
|
+
try {
|
|
46
|
+
return new Intl.DisplayNames([locale], { type: 'region' }).of(code) ?? code;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return code;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
15
52
|
function checkStructure(field, node, value, messages) {
|
|
16
53
|
const options = node.options ?? {};
|
|
17
54
|
const label = node.label ?? field.label;
|
|
@@ -21,12 +58,19 @@ function checkStructure(field, node, value, messages) {
|
|
|
21
58
|
if (typeof options['max'] === 'number' && value.length > options['max'])
|
|
22
59
|
return (0, messages_1.fill)(messages.maxLines, { label, max: options['max'] });
|
|
23
60
|
}
|
|
24
|
-
const needed = options['requiredParts'];
|
|
25
|
-
if (node.widget !== 'address' || !
|
|
61
|
+
const needed = Array.isArray(options['requiredParts']) ? options['requiredParts'] : [];
|
|
62
|
+
if (node.widget !== 'address' || !value || typeof value !== 'object' || Array.isArray(value))
|
|
26
63
|
return undefined;
|
|
27
64
|
const asked = Array.isArray(options['parts']) ? options['parts'] : exports.ADDRESS_PARTS;
|
|
28
65
|
const parts = value;
|
|
29
66
|
const missing = exports.ADDRESS_PARTS.findIndex((part) => needed.includes(part) && asked.includes(part) && !String(parts[part] ?? '').trim());
|
|
30
|
-
|
|
67
|
+
if (missing >= 0)
|
|
68
|
+
return (0, messages_1.fill)(messages.required, { label: messages.addressParts.split('|')[missing] });
|
|
69
|
+
if (postcodeFits(parts['country'], parts['postcode']) !== false)
|
|
70
|
+
return undefined;
|
|
71
|
+
const country = String(parts['country']).toUpperCase();
|
|
72
|
+
const shape = POSTCODES[country];
|
|
73
|
+
const n = shape.least === shape.most ? shape.least : `${shape.least}–${shape.most}`;
|
|
74
|
+
return (0, messages_1.fill)(messages.postcode, { label, country: countryName(country, messages.locale), n, example: shape.example });
|
|
31
75
|
}
|
|
32
76
|
//# sourceMappingURL=structures.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structures.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/structures.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"structures.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/structures.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,48 @@
|
|
|
1
|
+
import { foldDigits, stripMarks } from './input-rules.mjs';
|
|
1
2
|
import { fill } from './messages.mjs';
|
|
2
3
|
/**
|
|
3
4
|
* What a structure's widget asks of its answer beyond Required: an address
|
|
4
5
|
* (`json.address`) its parts in `options.requiredParts` filled — the first
|
|
5
|
-
* missing one named — and
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* missing one named — and its postcode of its country's shape where that is
|
|
7
|
+
* known; and a table of lines or a repeating group as few lines as
|
|
8
|
+
* `options.min` and as many as `options.max`, once it has any. Undefined when
|
|
9
|
+
* it keeps them, or when there is nothing to check.
|
|
8
10
|
*/
|
|
9
11
|
/** An address's parts, in the order its boxes and its messages name them. */
|
|
10
12
|
export const ADDRESS_PARTS = ['street', 'line2', 'city', 'region', 'postcode', 'country'];
|
|
13
|
+
/**
|
|
14
|
+
* A postcode's shape by its country, where it is known: how many digits, and
|
|
15
|
+
* one as the country writes it. Egypt's, Saudi Arabia's, Kuwait's and
|
|
16
|
+
* Jordan's have five; Bahrain's three or four; Oman's three. Others are not
|
|
17
|
+
* checked.
|
|
18
|
+
*/
|
|
19
|
+
const POSTCODES = {
|
|
20
|
+
EG: { least: 5, most: 5, example: '11511' },
|
|
21
|
+
SA: { least: 5, most: 5, example: '12271' },
|
|
22
|
+
KW: { least: 5, most: 5, example: '13001' },
|
|
23
|
+
JO: { least: 5, most: 5, example: '11118' },
|
|
24
|
+
BH: { least: 3, most: 4, example: '317' },
|
|
25
|
+
OM: { least: 3, most: 3, example: '112' },
|
|
26
|
+
};
|
|
27
|
+
/** A postcode as it is kept: digits in any script as 0-9, no direction marks, no spaces at its ends. */
|
|
28
|
+
export const settledPostcode = (text) => foldDigits(stripMarks(text)).trim();
|
|
29
|
+
/** Whether a postcode is of its country's shape: null when the country's shape is not known, or there is no postcode. */
|
|
30
|
+
export function postcodeFits(country, postcode) {
|
|
31
|
+
const shape = typeof country === 'string' ? POSTCODES[country.toUpperCase()] : undefined;
|
|
32
|
+
if (!shape || typeof postcode !== 'string' || !postcode.trim())
|
|
33
|
+
return null;
|
|
34
|
+
const digits = settledPostcode(postcode);
|
|
35
|
+
return /^[0-9]+$/.test(digits) && digits.length >= shape.least && digits.length <= shape.most;
|
|
36
|
+
}
|
|
37
|
+
/** A country's name in a language, by its code: Egypt, مصر, Égypte, Ägypten. */
|
|
38
|
+
function countryName(code, locale) {
|
|
39
|
+
try {
|
|
40
|
+
return new Intl.DisplayNames([locale], { type: 'region' }).of(code) ?? code;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return code;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
11
46
|
export function checkStructure(field, node, value, messages) {
|
|
12
47
|
const options = node.options ?? {};
|
|
13
48
|
const label = node.label ?? field.label;
|
|
@@ -17,12 +52,19 @@ export function checkStructure(field, node, value, messages) {
|
|
|
17
52
|
if (typeof options['max'] === 'number' && value.length > options['max'])
|
|
18
53
|
return fill(messages.maxLines, { label, max: options['max'] });
|
|
19
54
|
}
|
|
20
|
-
const needed = options['requiredParts'];
|
|
21
|
-
if (node.widget !== 'address' || !
|
|
55
|
+
const needed = Array.isArray(options['requiredParts']) ? options['requiredParts'] : [];
|
|
56
|
+
if (node.widget !== 'address' || !value || typeof value !== 'object' || Array.isArray(value))
|
|
22
57
|
return undefined;
|
|
23
58
|
const asked = Array.isArray(options['parts']) ? options['parts'] : ADDRESS_PARTS;
|
|
24
59
|
const parts = value;
|
|
25
60
|
const missing = ADDRESS_PARTS.findIndex((part) => needed.includes(part) && asked.includes(part) && !String(parts[part] ?? '').trim());
|
|
26
|
-
|
|
61
|
+
if (missing >= 0)
|
|
62
|
+
return fill(messages.required, { label: messages.addressParts.split('|')[missing] });
|
|
63
|
+
if (postcodeFits(parts['country'], parts['postcode']) !== false)
|
|
64
|
+
return undefined;
|
|
65
|
+
const country = String(parts['country']).toUpperCase();
|
|
66
|
+
const shape = POSTCODES[country];
|
|
67
|
+
const n = shape.least === shape.most ? shape.least : `${shape.least}–${shape.most}`;
|
|
68
|
+
return fill(messages.postcode, { label, country: countryName(country, messages.locale), n, example: shape.example });
|
|
27
69
|
}
|
|
28
70
|
//# sourceMappingURL=structures.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structures.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/structures.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAiB,MAAM,YAAY,CAAC;AAGjD
|
|
1
|
+
{"version":3,"file":"structures.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/structures.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,10 @@ export interface RelatedRecord {
|
|
|
19
19
|
color?: number;
|
|
20
20
|
details?: string;
|
|
21
21
|
folded?: boolean;
|
|
22
|
+
/** For a record of a tree (an area, an iteration): the names from the top down to it, its own last — ["Portal", "Sprint 14"]. */
|
|
23
|
+
path?: string[];
|
|
24
|
+
/** Words at the end of its row in a picker, such as an iteration's dates "3/25/2026 - 4/16/2026". */
|
|
25
|
+
aside?: string;
|
|
22
26
|
}
|
|
23
27
|
/** A reference points at a record of one of several models. */
|
|
24
28
|
export interface ReferenceValue {
|
|
@@ -19,6 +19,10 @@ export interface RelatedRecord {
|
|
|
19
19
|
color?: number;
|
|
20
20
|
details?: string;
|
|
21
21
|
folded?: boolean;
|
|
22
|
+
/** For a record of a tree (an area, an iteration): the names from the top down to it, its own last — ["Portal", "Sprint 14"]. */
|
|
23
|
+
path?: string[];
|
|
24
|
+
/** Words at the end of its row in a picker, such as an iteration's dates "3/25/2026 - 4/16/2026". */
|
|
25
|
+
aside?: string;
|
|
22
26
|
}
|
|
23
27
|
/** A reference points at a record of one of several models. */
|
|
24
28
|
export interface ReferenceValue {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"values.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/values.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"values.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/values.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"values.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/values.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"values.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/values.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAuEjC,oDAAoD;AACpD,MAAM,UAAU,UAAU,CAAC,KAAe;IACxC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,EAAE,CAAC;QACZ,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACpC;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,yIAAyI;AACzI,MAAM,UAAU,aAAa,CAAC,MAAgC,EAAE,KAAc;IAC5E,MAAM,MAAM,GAAW,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACzL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,OAAO,CAAC,KAAe,EAAE,KAAwB;IAC/D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IACpD,wDAAwD;IACxD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACzD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAgC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACxI,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,MAAgC;IAChF,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,KAAe,EAAE,KAAY;IACnD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,UAAU;YACb,OAAQ,KAAuB,CAAC,EAAE,CAAC;QACrC,KAAK,WAAW;YACd,OAAQ,KAAyB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/D,KAAK,UAAU;YACb,OAAQ,KAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,GAAG,KAAuB,CAAC;YACpC,OAAO,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;QAClC,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAqB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,KAAmB,CAAC,IAAI,CAAC;QAC5G;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,KAA2C,EAAE,MAAc;IAClF,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7D,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACpD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,SAAS,CAAC,CAAoB,EAAE,CAAoB;IAClE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,cAAc,CAAI,KAAQ;IACxC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAO,CAAC;AAChF,CAAC"}
|
package/src/runtime.d.mts
CHANGED
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
export type { JsonValue } from './lib/format/json.mjs';
|
|
7
7
|
export { FIELD_NAME, FIELD_TYPES, type FieldType } from './lib/format/names.mjs';
|
|
8
8
|
export type { Field, Fields, LineField, LineKinds, Option, OptionsFrom, DefinitionsFrom, PropertyDefinition, FilterCondition, FilterItem, SetWhen, MoneyLook, Period } from './lib/format/field.mjs';
|
|
9
|
-
export type { Modifier, Roles, CellRules, LineOrder, LineForm, PlaceholderWhen, HelpShown, ToneWhen, Tone, FieldNode, ButtonNode, TextNode, SlotNode, SectionNode, TabNode, TabsNode, StepNode, WizardNode, SectionsNode, SheetNode, SheetTitle, Statusbar, StatButton, Ribbon, Alert, Badge, MenuItem, RecordToolbar, AttachmentPreview, ColumnCount, ColumnsByWidth, LayoutNode, RootLayout, ListNode, ListMap, MapCard, CardLine, CardPart, PluralWords, MapLayer, MapNode, MapRoute, MapFence, MapReach, MapRegions, MapTool, Pin, ListFilter, LabelPlace, ScreenWidth, AnswerRule, DividerNode, SpacerNode, ImageNode, FormNode, WidgetOptions, } from './lib/format/layout.mjs';
|
|
9
|
+
export type { Modifier, Roles, CellRules, LineOrder, LineForm, PlaceholderWhen, HelpShown, ToneWhen, Tone, FieldNode, ButtonNode, TextNode, SlotNode, SectionNode, TabNode, TabsNode, StepNode, WizardNode, SectionsNode, SheetNode, SheetTitle, SheetHead, SheetKind, HeadLink, HeadBand, Statusbar, StatButton, Ribbon, Alert, Badge, MenuItem, RecordToolbar, AttachmentPreview, ColumnCount, ColumnsByWidth, LayoutNode, RootLayout, ListNode, ListMap, ListCell, MapCard, CardLine, CardPart, PluralWords, MapLayer, MapNode, MapRoute, MapFence, MapReach, MapRegions, MapTool, Pin, ListFilter, LabelPlace, ScreenWidth, AnswerRule, DividerNode, SpacerNode, ImageNode, FormNode, WidgetOptions, } from './lib/format/layout.mjs';
|
|
10
10
|
export type { AddressSearchOptions } from './lib/format/address-search.mjs';
|
|
11
|
+
export type { PathPickerOptions, StateDotOptions } from './lib/format/picker-options.mjs';
|
|
11
12
|
export { wideColumns } from './lib/format/columns.mjs';
|
|
12
13
|
export { cardLines, cardLineFields, cardPart, type CardLinePart } from './lib/format/card-lines.mjs';
|
|
13
14
|
export type { ActionStep, PageEvents, ValueMap, OpenStep, PanelSide, SetStep, ClearStep, AddLineStep, CheckStep, SaveStep, ResetStep, GoToStep, SayStep, AskStep, CallStep, CloseStep, OpenUrlStep, ReloadStep, ArchiveStep, UnarchiveStep, DuplicateStep, DeleteStep, PostStep, } from './lib/format/actions.mjs';
|
|
@@ -26,7 +27,7 @@ export { rolesAllow } from './lib/record/roles.mjs';
|
|
|
26
27
|
export type { CellState, FieldTone, LineState } from './lib/record/cells.mjs';
|
|
27
28
|
export { evaluateModifier, isModifierValid } from './lib/expression/evaluateModifier.mjs';
|
|
28
29
|
export { emptyValue, initialValues, isEmpty, expressionContext, lineKind, type RecordId, type RelatedRecord, type ReferenceValue, type FileValue, type Line, type Value, type Values, } from './lib/record/values.mjs';
|
|
29
|
-
export { checkValue, formatBytes, fileProblem, describeTypes } from './lib/record/check.mjs';
|
|
30
|
+
export { checkValue, checkProperties, decimalsWords, formatBytes, fileProblem, describeTypes } from './lib/record/check.mjs';
|
|
30
31
|
export { scoreOf, type Score } from './lib/record/score.mjs';
|
|
31
32
|
export type { DataSource, LoadRequest, SaveRequest, SaveResult, OnchangeRequest, OnchangeResult, SearchRequest, CreateRequest, SubmitRequest, SubmitResult, ResolvedFilterCondition, ResolvedFilter, RecordChanges, LineOp, LinkOp, SaveProblem, SortOrder, ListRequest, ListResult, GroupRequest, Group, OptionsRequest, RecordRequest, ArchiveRequest, } from './lib/record/data-source.mjs';
|
|
32
33
|
export { saveRefused, saveProblemOf } from './lib/record/data-source.mjs';
|
|
@@ -37,5 +38,8 @@ export { hostScheduler, wait, type Scheduler } from './lib/record/scheduler.mjs'
|
|
|
37
38
|
export { createForm, type Form, type FormOptions, type FormUser, type FormState, type FormStatus, type NodeState, type Choices, type Definitions, type DraftStore, type ActionRequest, type ChangeBy, type FormEvents, } from './lib/record/form.mjs';
|
|
38
39
|
export type { ActionHost, ActionResult, ChosenLines, OnAction, OpenRequest, OpenResult, PostedMessage, RunContext, RunResult, RunStop } from './lib/record/run.mjs';
|
|
39
40
|
export { MESSAGES, fill, type Messages, type Locale } from './lib/record/messages.mjs';
|
|
41
|
+
export { stripMarks, foldDigits, oneLine, charCount, foldForSearch, numberMarks, readNumber, couldBeNumber, numberMisfit, cleanPastedNumber, readDuration, readDate, couldBeMonth, readTime, placesOfCurrency, placesOf, MOST_DIGITS, type NumberMarks, type NumberProblem, type NumberReading, type NumberRead, type NumberReadOptions, type NumberLimits, type NumberRefusal, type PastedNumber, type DurationProblem, type DurationRead, type DateOrder, type DateProblem, type DateRead, type TimeRead, } from './lib/record/input-rules.mjs';
|
|
40
42
|
export { dayOf } from './lib/record/limits.mjs';
|
|
41
|
-
export { ADDRESS_PARTS } from './lib/record/structures.mjs';
|
|
43
|
+
export { ADDRESS_PARTS, postcodeFits, settledPostcode } from './lib/record/structures.mjs';
|
|
44
|
+
export { webAddress, settledText, hasPattern, EMAIL_LOCAL_STRAYS } from './lib/record/inputs.mjs';
|
|
45
|
+
export { fieldPattern } from './lib/format/pattern.mjs';
|
package/src/runtime.d.ts
CHANGED
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
export type { JsonValue } from './lib/format/json';
|
|
7
7
|
export { FIELD_NAME, FIELD_TYPES, type FieldType } from './lib/format/names';
|
|
8
8
|
export type { Field, Fields, LineField, LineKinds, Option, OptionsFrom, DefinitionsFrom, PropertyDefinition, FilterCondition, FilterItem, SetWhen, MoneyLook, Period } from './lib/format/field';
|
|
9
|
-
export type { Modifier, Roles, CellRules, LineOrder, LineForm, PlaceholderWhen, HelpShown, ToneWhen, Tone, FieldNode, ButtonNode, TextNode, SlotNode, SectionNode, TabNode, TabsNode, StepNode, WizardNode, SectionsNode, SheetNode, SheetTitle, Statusbar, StatButton, Ribbon, Alert, Badge, MenuItem, RecordToolbar, AttachmentPreview, ColumnCount, ColumnsByWidth, LayoutNode, RootLayout, ListNode, ListMap, MapCard, CardLine, CardPart, PluralWords, MapLayer, MapNode, MapRoute, MapFence, MapReach, MapRegions, MapTool, Pin, ListFilter, LabelPlace, ScreenWidth, AnswerRule, DividerNode, SpacerNode, ImageNode, FormNode, WidgetOptions, } from './lib/format/layout';
|
|
9
|
+
export type { Modifier, Roles, CellRules, LineOrder, LineForm, PlaceholderWhen, HelpShown, ToneWhen, Tone, FieldNode, ButtonNode, TextNode, SlotNode, SectionNode, TabNode, TabsNode, StepNode, WizardNode, SectionsNode, SheetNode, SheetTitle, SheetHead, SheetKind, HeadLink, HeadBand, Statusbar, StatButton, Ribbon, Alert, Badge, MenuItem, RecordToolbar, AttachmentPreview, ColumnCount, ColumnsByWidth, LayoutNode, RootLayout, ListNode, ListMap, ListCell, MapCard, CardLine, CardPart, PluralWords, MapLayer, MapNode, MapRoute, MapFence, MapReach, MapRegions, MapTool, Pin, ListFilter, LabelPlace, ScreenWidth, AnswerRule, DividerNode, SpacerNode, ImageNode, FormNode, WidgetOptions, } from './lib/format/layout';
|
|
10
10
|
export type { AddressSearchOptions } from './lib/format/address-search';
|
|
11
|
+
export type { PathPickerOptions, StateDotOptions } from './lib/format/picker-options';
|
|
11
12
|
export { wideColumns } from './lib/format/columns';
|
|
12
13
|
export { cardLines, cardLineFields, cardPart, type CardLinePart } from './lib/format/card-lines';
|
|
13
14
|
export type { ActionStep, PageEvents, ValueMap, OpenStep, PanelSide, SetStep, ClearStep, AddLineStep, CheckStep, SaveStep, ResetStep, GoToStep, SayStep, AskStep, CallStep, CloseStep, OpenUrlStep, ReloadStep, ArchiveStep, UnarchiveStep, DuplicateStep, DeleteStep, PostStep, } from './lib/format/actions';
|
|
@@ -26,7 +27,7 @@ export { rolesAllow } from './lib/record/roles';
|
|
|
26
27
|
export type { CellState, FieldTone, LineState } from './lib/record/cells';
|
|
27
28
|
export { evaluateModifier, isModifierValid } from './lib/expression/evaluateModifier';
|
|
28
29
|
export { emptyValue, initialValues, isEmpty, expressionContext, lineKind, type RecordId, type RelatedRecord, type ReferenceValue, type FileValue, type Line, type Value, type Values, } from './lib/record/values';
|
|
29
|
-
export { checkValue, formatBytes, fileProblem, describeTypes } from './lib/record/check';
|
|
30
|
+
export { checkValue, checkProperties, decimalsWords, formatBytes, fileProblem, describeTypes } from './lib/record/check';
|
|
30
31
|
export { scoreOf, type Score } from './lib/record/score';
|
|
31
32
|
export type { DataSource, LoadRequest, SaveRequest, SaveResult, OnchangeRequest, OnchangeResult, SearchRequest, CreateRequest, SubmitRequest, SubmitResult, ResolvedFilterCondition, ResolvedFilter, RecordChanges, LineOp, LinkOp, SaveProblem, SortOrder, ListRequest, ListResult, GroupRequest, Group, OptionsRequest, RecordRequest, ArchiveRequest, } from './lib/record/data-source';
|
|
32
33
|
export { saveRefused, saveProblemOf } from './lib/record/data-source';
|
|
@@ -37,5 +38,8 @@ export { hostScheduler, wait, type Scheduler } from './lib/record/scheduler';
|
|
|
37
38
|
export { createForm, type Form, type FormOptions, type FormUser, type FormState, type FormStatus, type NodeState, type Choices, type Definitions, type DraftStore, type ActionRequest, type ChangeBy, type FormEvents, } from './lib/record/form';
|
|
38
39
|
export type { ActionHost, ActionResult, ChosenLines, OnAction, OpenRequest, OpenResult, PostedMessage, RunContext, RunResult, RunStop } from './lib/record/run';
|
|
39
40
|
export { MESSAGES, fill, type Messages, type Locale } from './lib/record/messages';
|
|
41
|
+
export { stripMarks, foldDigits, oneLine, charCount, foldForSearch, numberMarks, readNumber, couldBeNumber, numberMisfit, cleanPastedNumber, readDuration, readDate, couldBeMonth, readTime, placesOfCurrency, placesOf, MOST_DIGITS, type NumberMarks, type NumberProblem, type NumberReading, type NumberRead, type NumberReadOptions, type NumberLimits, type NumberRefusal, type PastedNumber, type DurationProblem, type DurationRead, type DateOrder, type DateProblem, type DateRead, type TimeRead, } from './lib/record/input-rules';
|
|
40
42
|
export { dayOf } from './lib/record/limits';
|
|
41
|
-
export { ADDRESS_PARTS } from './lib/record/structures';
|
|
43
|
+
export { ADDRESS_PARTS, postcodeFits, settledPostcode } from './lib/record/structures';
|
|
44
|
+
export { webAddress, settledText, hasPattern, EMAIL_LOCAL_STRAYS } from './lib/record/inputs';
|
|
45
|
+
export { fieldPattern } from './lib/format/pattern';
|