@fieldia/core 0.26.1 → 0.28.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/README.md +326 -3
- package/package.json +1 -1
- package/schema/page.schema.json +230 -24
- package/src/index.d.mts +10 -2
- package/src/index.d.ts +10 -2
- package/src/index.js +26 -1
- package/src/index.js.map +1 -1
- package/src/index.mjs +11 -2
- package/src/index.mjs.map +1 -1
- package/src/lib/expression/app-functions.d.mts +47 -0
- package/src/lib/expression/app-functions.d.ts +47 -0
- package/src/lib/expression/app-functions.js +64 -0
- package/src/lib/expression/app-functions.js.map +1 -0
- package/src/lib/expression/app-functions.mjs +58 -0
- package/src/lib/expression/app-functions.mjs.map +1 -0
- package/src/lib/expression/dates.d.mts +21 -0
- package/src/lib/expression/dates.d.ts +21 -0
- package/src/lib/expression/dates.js +73 -0
- package/src/lib/expression/dates.js.map +1 -0
- package/src/lib/expression/dates.mjs +67 -0
- package/src/lib/expression/dates.mjs.map +1 -0
- package/src/lib/expression/evaluator.js +12 -6
- package/src/lib/expression/evaluator.js.map +1 -1
- package/src/lib/expression/evaluator.mjs +12 -6
- package/src/lib/expression/evaluator.mjs.map +1 -1
- package/src/lib/expression/expression.d.mts +7 -3
- package/src/lib/expression/expression.d.ts +7 -3
- package/src/lib/expression/expression.js +8 -2
- package/src/lib/expression/expression.js.map +1 -1
- package/src/lib/expression/expression.mjs +7 -2
- package/src/lib/expression/expression.mjs.map +1 -1
- package/src/lib/expression/functions-part.d.mts +7 -0
- package/src/lib/expression/functions-part.d.ts +7 -0
- package/src/lib/expression/functions-part.js +13 -0
- package/src/lib/expression/functions-part.js.map +1 -0
- package/src/lib/expression/functions-part.mjs +8 -0
- package/src/lib/expression/functions-part.mjs.map +1 -0
- package/src/lib/expression/functions.d.mts +60 -3
- package/src/lib/expression/functions.d.ts +60 -3
- package/src/lib/expression/functions.js +109 -15
- package/src/lib/expression/functions.js.map +1 -1
- package/src/lib/expression/functions.mjs +103 -16
- package/src/lib/expression/functions.mjs.map +1 -1
- package/src/lib/expression/kinds.d.mts +31 -0
- package/src/lib/expression/kinds.d.ts +31 -0
- package/src/lib/expression/kinds.js +159 -0
- package/src/lib/expression/kinds.js.map +1 -0
- package/src/lib/expression/kinds.mjs +151 -0
- package/src/lib/expression/kinds.mjs.map +1 -0
- package/src/lib/expression/modifier.d.mts +4 -3
- package/src/lib/expression/modifier.d.ts +4 -3
- package/src/lib/expression/modifier.js +4 -3
- package/src/lib/expression/modifier.js.map +1 -1
- package/src/lib/expression/modifier.mjs +4 -3
- package/src/lib/expression/modifier.mjs.map +1 -1
- package/src/lib/expression/more-functions.d.mts +8 -0
- package/src/lib/expression/more-functions.d.ts +8 -0
- package/src/lib/expression/more-functions.js +235 -0
- package/src/lib/expression/more-functions.js.map +1 -0
- package/src/lib/expression/more-functions.mjs +230 -0
- package/src/lib/expression/more-functions.mjs.map +1 -0
- package/src/lib/expression/parser.d.mts +4 -1
- package/src/lib/expression/parser.d.ts +4 -1
- package/src/lib/expression/parser.js +6 -3
- package/src/lib/expression/parser.js.map +1 -1
- package/src/lib/expression/parser.mjs +6 -3
- package/src/lib/expression/parser.mjs.map +1 -1
- package/src/lib/expression/reads.d.mts +2 -2
- package/src/lib/expression/reads.d.ts +2 -2
- package/src/lib/expression/reads.js +6 -4
- package/src/lib/expression/reads.js.map +1 -1
- package/src/lib/expression/reads.mjs +6 -4
- package/src/lib/expression/reads.mjs.map +1 -1
- package/src/lib/format/actions.d.mts +16 -16
- package/src/lib/format/actions.d.ts +16 -16
- package/src/lib/format/check-page.d.mts +7 -2
- package/src/lib/format/check-page.d.ts +7 -2
- package/src/lib/format/check-page.js +10 -4
- package/src/lib/format/check-page.js.map +1 -1
- package/src/lib/format/check-page.mjs +10 -4
- package/src/lib/format/check-page.mjs.map +1 -1
- package/src/lib/format/choice-options.d.mts +34 -0
- package/src/lib/format/choice-options.d.ts +34 -0
- package/src/lib/format/choice-options.js +60 -0
- package/src/lib/format/choice-options.js.map +1 -0
- package/src/lib/format/choice-options.mjs +51 -0
- package/src/lib/format/choice-options.mjs.map +1 -0
- package/src/lib/format/endings-checks.d.mts +8 -0
- package/src/lib/format/endings-checks.d.ts +8 -0
- package/src/lib/format/endings-checks.js +23 -0
- package/src/lib/format/endings-checks.js.map +1 -0
- package/src/lib/format/endings-checks.mjs +20 -0
- package/src/lib/format/endings-checks.mjs.map +1 -0
- package/src/lib/format/endings.d.mts +40 -0
- package/src/lib/format/endings.d.ts +40 -0
- package/src/lib/format/endings.js +15 -0
- package/src/lib/format/endings.js.map +1 -0
- package/src/lib/format/endings.mjs +12 -0
- package/src/lib/format/endings.mjs.map +1 -0
- package/src/lib/format/field.d.mts +151 -16
- package/src/lib/format/field.d.ts +151 -16
- package/src/lib/format/field.js +64 -11
- package/src/lib/format/field.js.map +1 -1
- package/src/lib/format/field.mjs +63 -10
- package/src/lib/format/field.mjs.map +1 -1
- package/src/lib/format/head-checks.d.mts +2 -0
- package/src/lib/format/head-checks.d.ts +2 -0
- package/src/lib/format/head-checks.js +2 -59
- package/src/lib/format/head-checks.js.map +1 -1
- package/src/lib/format/head-checks.mjs +1 -58
- package/src/lib/format/head-checks.mjs.map +1 -1
- package/src/lib/format/later-checks.d.mts +17 -0
- package/src/lib/format/later-checks.d.ts +17 -0
- package/src/lib/format/later-checks.js +20 -0
- package/src/lib/format/later-checks.js.map +1 -0
- package/src/lib/format/later-checks.mjs +17 -0
- package/src/lib/format/later-checks.mjs.map +1 -0
- package/src/lib/format/layout.d.mts +264 -190
- package/src/lib/format/layout.d.ts +264 -190
- package/src/lib/format/layout.js +34 -29
- package/src/lib/format/layout.js.map +1 -1
- package/src/lib/format/layout.mjs +14 -4
- package/src/lib/format/layout.mjs.map +1 -1
- package/src/lib/format/layout.types.d.mts +2 -1
- package/src/lib/format/layout.types.d.ts +2 -1
- package/src/lib/format/limits-checks.d.mts +14 -0
- package/src/lib/format/limits-checks.d.ts +14 -0
- package/src/lib/format/limits-checks.js +36 -0
- package/src/lib/format/limits-checks.js.map +1 -0
- package/src/lib/format/limits-checks.mjs +33 -0
- package/src/lib/format/limits-checks.mjs.map +1 -0
- package/src/lib/format/limits.d.mts +24 -0
- package/src/lib/format/limits.d.ts +24 -0
- package/src/lib/format/limits.js +35 -0
- package/src/lib/format/limits.js.map +1 -0
- package/src/lib/format/limits.mjs +32 -0
- package/src/lib/format/limits.mjs.map +1 -0
- package/src/lib/format/list-checks.d.mts +44 -0
- package/src/lib/format/list-checks.d.ts +44 -0
- package/src/lib/format/list-checks.js +340 -0
- package/src/lib/format/list-checks.js.map +1 -0
- package/src/lib/format/list-checks.mjs +336 -0
- package/src/lib/format/list-checks.mjs.map +1 -0
- package/src/lib/format/map-checks.d.mts +33 -0
- package/src/lib/format/map-checks.d.ts +33 -0
- package/src/lib/format/map-checks.js +180 -0
- package/src/lib/format/map-checks.js.map +1 -0
- package/src/lib/format/map-checks.mjs +175 -0
- package/src/lib/format/map-checks.mjs.map +1 -0
- package/src/lib/format/mapchecks-part.d.mts +5 -0
- package/src/lib/format/mapchecks-part.d.ts +5 -0
- package/src/lib/format/mapchecks-part.js +11 -0
- package/src/lib/format/mapchecks-part.js.map +1 -0
- package/src/lib/format/mapchecks-part.mjs +6 -0
- package/src/lib/format/mapchecks-part.mjs.map +1 -0
- package/src/lib/format/option-checks.d.mts +16 -0
- package/src/lib/format/option-checks.d.ts +16 -0
- package/src/lib/format/option-checks.js +39 -0
- package/src/lib/format/option-checks.js.map +1 -0
- package/src/lib/format/option-checks.mjs +36 -0
- package/src/lib/format/option-checks.mjs.map +1 -0
- package/src/lib/format/options-part.d.mts +6 -0
- package/src/lib/format/options-part.d.ts +6 -0
- package/src/lib/format/options-part.js +11 -0
- package/src/lib/format/options-part.js.map +1 -0
- package/src/lib/format/options-part.mjs +7 -0
- package/src/lib/format/options-part.mjs.map +1 -0
- package/src/lib/format/page.d.mts +154 -71
- package/src/lib/format/page.d.ts +154 -71
- package/src/lib/format/page.js +5 -0
- package/src/lib/format/page.js.map +1 -1
- package/src/lib/format/page.mjs +5 -0
- package/src/lib/format/page.mjs.map +1 -1
- package/src/lib/format/part-checks.d.mts +20 -0
- package/src/lib/format/part-checks.d.ts +20 -0
- package/src/lib/format/part-checks.js +3 -0
- package/src/lib/format/part-checks.js.map +1 -0
- package/src/lib/format/part-checks.mjs +2 -0
- package/src/lib/format/part-checks.mjs.map +1 -0
- package/src/lib/format/references.d.mts +71 -65
- package/src/lib/format/references.d.ts +71 -65
- package/src/lib/format/references.js +194 -631
- package/src/lib/format/references.js.map +1 -1
- package/src/lib/format/references.mjs +194 -631
- package/src/lib/format/references.mjs.map +1 -1
- package/src/lib/format/seats-checks.d.mts +3 -0
- package/src/lib/format/seats-checks.d.ts +3 -0
- package/src/lib/format/seats-checks.js +13 -0
- package/src/lib/format/seats-checks.js.map +1 -0
- package/src/lib/format/seats-checks.mjs +10 -0
- package/src/lib/format/seats-checks.mjs.map +1 -0
- package/src/lib/format/sheet-head-checks.d.mts +4 -0
- package/src/lib/format/sheet-head-checks.d.ts +4 -0
- package/src/lib/format/sheet-head-checks.js +68 -0
- package/src/lib/format/sheet-head-checks.js.map +1 -0
- package/src/lib/format/sheet-head-checks.mjs +65 -0
- package/src/lib/format/sheet-head-checks.mjs.map +1 -0
- package/src/lib/format/signature-checks.d.mts +7 -0
- package/src/lib/format/signature-checks.d.ts +7 -0
- package/src/lib/format/signature-checks.js +32 -0
- package/src/lib/format/signature-checks.js.map +1 -0
- package/src/lib/format/signature-checks.mjs +29 -0
- package/src/lib/format/signature-checks.mjs.map +1 -0
- package/src/lib/format/signature-options.d.mts +24 -0
- package/src/lib/format/signature-options.d.ts +24 -0
- package/src/lib/format/signature-options.js +30 -0
- package/src/lib/format/signature-options.js.map +1 -0
- package/src/lib/format/signature-options.mjs +26 -0
- package/src/lib/format/signature-options.mjs.map +1 -0
- package/src/lib/format/slots-checks.d.mts +4 -0
- package/src/lib/format/slots-checks.d.ts +4 -0
- package/src/lib/format/slots-checks.js +21 -0
- package/src/lib/format/slots-checks.js.map +1 -0
- package/src/lib/format/slots-checks.mjs +18 -0
- package/src/lib/format/slots-checks.mjs.map +1 -0
- package/src/lib/format/statusbar-checks.d.mts +8 -0
- package/src/lib/format/statusbar-checks.d.ts +8 -0
- package/src/lib/format/statusbar-checks.js +35 -0
- package/src/lib/format/statusbar-checks.js.map +1 -0
- package/src/lib/format/statusbar-checks.mjs +32 -0
- package/src/lib/format/statusbar-checks.mjs.map +1 -0
- package/src/lib/format/table-checks.d.mts +21 -0
- package/src/lib/format/table-checks.d.ts +21 -0
- package/src/lib/format/table-checks.js +86 -0
- package/src/lib/format/table-checks.js.map +1 -0
- package/src/lib/format/table-checks.mjs +82 -0
- package/src/lib/format/table-checks.mjs.map +1 -0
- package/src/lib/format/translate.js +2 -2
- package/src/lib/format/translate.js.map +1 -1
- package/src/lib/format/translate.mjs +2 -2
- package/src/lib/format/translate.mjs.map +1 -1
- package/src/lib/format/upgrade.d.mts +7 -3
- package/src/lib/format/upgrade.d.ts +7 -3
- package/src/lib/format/upgrade.js +7 -3
- package/src/lib/format/upgrade.js.map +1 -1
- package/src/lib/format/upgrade.mjs +7 -3
- package/src/lib/format/upgrade.mjs.map +1 -1
- package/src/lib/format/validate.d.mts +18 -2
- package/src/lib/format/validate.d.ts +18 -2
- package/src/lib/format/validate.js +36 -3
- package/src/lib/format/validate.js.map +1 -1
- package/src/lib/format/validate.mjs +35 -3
- package/src/lib/format/validate.mjs.map +1 -1
- package/src/lib/format/version.d.mts +2 -2
- package/src/lib/format/version.d.ts +2 -2
- package/src/lib/format/version.js +2 -2
- package/src/lib/format/version.js.map +1 -1
- package/src/lib/format/version.mjs +2 -2
- package/src/lib/format/version.mjs.map +1 -1
- package/src/lib/format/words.d.mts +6 -2
- package/src/lib/format/words.d.ts +6 -2
- package/src/lib/format/words.js +13 -7
- package/src/lib/format/words.js.map +1 -1
- package/src/lib/format/words.mjs +13 -7
- package/src/lib/format/words.mjs.map +1 -1
- package/src/lib/parts.d.mts +45 -0
- package/src/lib/parts.d.ts +45 -0
- package/src/lib/parts.js +60 -0
- package/src/lib/parts.js.map +1 -0
- package/src/lib/parts.mjs +53 -0
- package/src/lib/parts.mjs.map +1 -0
- package/src/lib/record/cells.d.mts +3 -3
- package/src/lib/record/cells.d.ts +3 -3
- package/src/lib/record/cells.js +16 -15
- package/src/lib/record/cells.js.map +1 -1
- package/src/lib/record/cells.mjs +16 -15
- package/src/lib/record/cells.mjs.map +1 -1
- package/src/lib/record/check.js +3 -1
- package/src/lib/record/check.js.map +1 -1
- package/src/lib/record/check.mjs +3 -1
- package/src/lib/record/check.mjs.map +1 -1
- package/src/lib/record/compute.d.mts +16 -5
- package/src/lib/record/compute.d.ts +16 -5
- package/src/lib/record/compute.js +57 -16
- package/src/lib/record/compute.js.map +1 -1
- package/src/lib/record/compute.mjs +57 -16
- package/src/lib/record/compute.mjs.map +1 -1
- package/src/lib/record/data-source.d.mts +140 -3
- package/src/lib/record/data-source.d.ts +140 -3
- package/src/lib/record/data-source.js.map +1 -1
- package/src/lib/record/data-source.mjs.map +1 -1
- package/src/lib/record/day-words.d.mts +10 -0
- package/src/lib/record/day-words.d.ts +10 -0
- package/src/lib/record/day-words.js +23 -0
- package/src/lib/record/day-words.js.map +1 -0
- package/src/lib/record/day-words.mjs +20 -0
- package/src/lib/record/day-words.mjs.map +1 -0
- package/src/lib/record/drafts.d.mts +19 -0
- package/src/lib/record/drafts.d.ts +19 -0
- package/src/lib/record/drafts.js +35 -0
- package/src/lib/record/drafts.js.map +1 -0
- package/src/lib/record/drafts.mjs +31 -0
- package/src/lib/record/drafts.mjs.map +1 -0
- package/src/lib/record/env.d.mts +5 -1
- package/src/lib/record/env.d.ts +5 -1
- package/src/lib/record/env.js +9 -1
- package/src/lib/record/env.js.map +1 -1
- package/src/lib/record/env.mjs +8 -1
- package/src/lib/record/env.mjs.map +1 -1
- package/src/lib/record/form-limits.d.mts +78 -0
- package/src/lib/record/form-limits.d.ts +78 -0
- package/src/lib/record/form-limits.js +230 -0
- package/src/lib/record/form-limits.js.map +1 -0
- package/src/lib/record/form-limits.mjs +223 -0
- package/src/lib/record/form-limits.mjs.map +1 -0
- package/src/lib/record/form.d.mts +180 -9
- package/src/lib/record/form.d.ts +180 -9
- package/src/lib/record/form.js +858 -90
- package/src/lib/record/form.js.map +1 -1
- package/src/lib/record/form.mjs +858 -90
- package/src/lib/record/form.mjs.map +1 -1
- package/src/lib/record/limits-part.d.mts +6 -0
- package/src/lib/record/limits-part.d.ts +6 -0
- package/src/lib/record/limits-part.js +12 -0
- package/src/lib/record/limits-part.js.map +1 -0
- package/src/lib/record/limits-part.mjs +7 -0
- package/src/lib/record/limits-part.mjs.map +1 -0
- package/src/lib/record/limits.js +4 -2
- package/src/lib/record/limits.js.map +1 -1
- package/src/lib/record/limits.mjs +4 -2
- package/src/lib/record/limits.mjs.map +1 -1
- package/src/lib/record/line-choices.d.mts +30 -0
- package/src/lib/record/line-choices.d.ts +30 -0
- package/src/lib/record/line-choices.js +42 -0
- package/src/lib/record/line-choices.js.map +1 -0
- package/src/lib/record/line-choices.mjs +36 -0
- package/src/lib/record/line-choices.mjs.map +1 -0
- package/src/lib/record/locales/ar.js +11 -0
- package/src/lib/record/locales/ar.js.map +1 -1
- package/src/lib/record/locales/ar.mjs +11 -0
- package/src/lib/record/locales/ar.mjs.map +1 -1
- package/src/lib/record/locales/de.js +11 -0
- package/src/lib/record/locales/de.js.map +1 -1
- package/src/lib/record/locales/de.mjs +11 -0
- package/src/lib/record/locales/de.mjs.map +1 -1
- package/src/lib/record/locales/fr.js +11 -0
- package/src/lib/record/locales/fr.js.map +1 -1
- package/src/lib/record/locales/fr.mjs +11 -0
- package/src/lib/record/locales/fr.mjs.map +1 -1
- package/src/lib/record/memory-data-source.d.mts +44 -3
- package/src/lib/record/memory-data-source.d.ts +44 -3
- package/src/lib/record/memory-data-source.js +102 -40
- package/src/lib/record/memory-data-source.js.map +1 -1
- package/src/lib/record/memory-data-source.mjs +101 -40
- package/src/lib/record/memory-data-source.mjs.map +1 -1
- package/src/lib/record/memory-kept.d.mts +20 -0
- package/src/lib/record/memory-kept.d.ts +20 -0
- package/src/lib/record/memory-kept.js +46 -0
- package/src/lib/record/memory-kept.js.map +1 -0
- package/src/lib/record/memory-kept.mjs +43 -0
- package/src/lib/record/memory-kept.mjs.map +1 -0
- package/src/lib/record/memory-later.d.mts +19 -0
- package/src/lib/record/memory-later.d.ts +19 -0
- package/src/lib/record/memory-later.js +39 -0
- package/src/lib/record/memory-later.js.map +1 -0
- package/src/lib/record/memory-later.mjs +35 -0
- package/src/lib/record/memory-later.mjs.map +1 -0
- package/src/lib/record/memory-part.d.mts +7 -0
- package/src/lib/record/memory-part.d.ts +7 -0
- package/src/lib/record/memory-part.js +13 -0
- package/src/lib/record/memory-part.js.map +1 -0
- package/src/lib/record/memory-part.mjs +8 -0
- package/src/lib/record/memory-part.mjs.map +1 -0
- package/src/lib/record/messages.d.mts +27 -2
- package/src/lib/record/messages.d.ts +27 -2
- package/src/lib/record/messages.js +13 -4
- package/src/lib/record/messages.js.map +1 -1
- package/src/lib/record/messages.mjs +13 -4
- package/src/lib/record/messages.mjs.map +1 -1
- package/src/lib/record/option-rules.d.mts +56 -0
- package/src/lib/record/option-rules.d.ts +56 -0
- package/src/lib/record/option-rules.js +143 -0
- package/src/lib/record/option-rules.js.map +1 -0
- package/src/lib/record/option-rules.mjs +140 -0
- package/src/lib/record/option-rules.mjs.map +1 -0
- package/src/lib/record/record-words.d.mts +13 -1
- package/src/lib/record/record-words.d.ts +13 -1
- package/src/lib/record/record-words.js +29 -1
- package/src/lib/record/record-words.js.map +1 -1
- package/src/lib/record/record-words.mjs +27 -1
- package/src/lib/record/record-words.mjs.map +1 -1
- package/src/lib/record/rules.d.mts +2 -2
- package/src/lib/record/rules.d.ts +2 -2
- package/src/lib/record/rules.js +3 -3
- package/src/lib/record/rules.js.map +1 -1
- package/src/lib/record/rules.mjs +3 -3
- package/src/lib/record/rules.mjs.map +1 -1
- package/src/lib/record/run.js +9 -7
- package/src/lib/record/run.js.map +1 -1
- package/src/lib/record/run.mjs +9 -7
- package/src/lib/record/run.mjs.map +1 -1
- package/src/lib/record/search.d.mts +12 -2
- package/src/lib/record/search.d.ts +12 -2
- package/src/lib/record/search.js +29 -4
- package/src/lib/record/search.js.map +1 -1
- package/src/lib/record/search.mjs +29 -4
- package/src/lib/record/search.mjs.map +1 -1
- package/src/lib/record/set-when.d.mts +3 -3
- package/src/lib/record/set-when.d.ts +3 -3
- package/src/lib/record/set-when.js +9 -9
- package/src/lib/record/set-when.js.map +1 -1
- package/src/lib/record/set-when.mjs +9 -9
- package/src/lib/record/set-when.mjs.map +1 -1
- package/src/lib/record/signed.d.mts +21 -0
- package/src/lib/record/signed.d.ts +21 -0
- package/src/lib/record/signed.js +62 -0
- package/src/lib/record/signed.js.map +1 -0
- package/src/lib/record/signed.mjs +57 -0
- package/src/lib/record/signed.mjs.map +1 -0
- package/src/lib/record/taking.d.mts +60 -0
- package/src/lib/record/taking.d.ts +60 -0
- package/src/lib/record/taking.js +58 -0
- package/src/lib/record/taking.js.map +1 -0
- package/src/lib/record/taking.mjs +50 -0
- package/src/lib/record/taking.mjs.map +1 -0
- package/src/lib/record/value-map.js +11 -4
- package/src/lib/record/value-map.js.map +1 -1
- package/src/lib/record/value-map.mjs +11 -4
- package/src/lib/record/value-map.mjs.map +1 -1
- package/src/lib/record/values.d.mts +20 -0
- package/src/lib/record/values.d.ts +20 -0
- package/src/lib/record/values.js.map +1 -1
- package/src/lib/record/values.mjs.map +1 -1
- package/src/lib/record/waits.d.mts +13 -6
- package/src/lib/record/waits.d.ts +13 -6
- package/src/lib/record/waits.js +9 -12
- package/src/lib/record/waits.js.map +1 -1
- package/src/lib/record/waits.mjs +9 -12
- package/src/lib/record/waits.mjs.map +1 -1
- package/src/runtime.d.mts +17 -6
- package/src/runtime.d.ts +17 -6
- package/src/runtime.js +45 -3
- package/src/runtime.js.map +1 -1
- package/src/runtime.mjs +17 -1
- package/src/runtime.mjs.map +1 -1
|
@@ -34,7 +34,7 @@ export interface DataSource {
|
|
|
34
34
|
list?(request: ListRequest): Promise<ListResult>;
|
|
35
35
|
/** How many records fall under each value of a field, for a list's Group By. */
|
|
36
36
|
groups?(request: GroupRequest): Promise<Group[]>;
|
|
37
|
-
/** The choices of one of the app's lists, for a selection with `optionsFrom
|
|
37
|
+
/** The choices of one of the app's lists, for a selection with `optionsFrom` — a page's field, or a table's line by its values. */
|
|
38
38
|
options?(request: OptionsRequest): Promise<Option[]>;
|
|
39
39
|
/** The definitions of a properties field with `definitionsFrom`: those the linked record keeps. */
|
|
40
40
|
definitions?(request: OptionsRequest): Promise<PropertyDefinition[]>;
|
|
@@ -132,6 +132,120 @@ export interface DataSource {
|
|
|
132
132
|
* with why) and nothing changes. Without it, possible duplicates offer no Merge.
|
|
133
133
|
*/
|
|
134
134
|
merge?(request: MergeRequest): Promise<MergeResult | void>;
|
|
135
|
+
/**
|
|
136
|
+
* The records a person said are someone else for this one ("It's someone new"), by id: asked as a saved record is
|
|
137
|
+
* shown, before its possible duplicates are said, so one let be on another device stays let be here. A pair: answer
|
|
138
|
+
* from either side where you keep them so. With `markNotDuplicate`, these are kept on your server; without both,
|
|
139
|
+
* in the person's browser (the viewer's `preferences`), as before. To fail, throw: what the browser kept is read.
|
|
140
|
+
*/
|
|
141
|
+
notDuplicates?(request: NotDuplicatesRequest): Promise<RecordId[]>;
|
|
142
|
+
/**
|
|
143
|
+
* Keep that a record found is someone else for this one: the person pressed "It's someone new" on a saved record,
|
|
144
|
+
* or saved a new one after pressing it (once for each). Never said as its duplicate again, on any device. Refused
|
|
145
|
+
* (thrown), the browser keeps it instead, as without this.
|
|
146
|
+
*/
|
|
147
|
+
markNotDuplicate?(request: MarkNotDuplicateRequest): Promise<void>;
|
|
148
|
+
/**
|
|
149
|
+
* How many answers a page has taken, for its `limits` and its options' `seats`: the responses sent so far (what
|
|
150
|
+
* `maxResponses` counts), this person's (what `onePerPerson` counts), and for each choice field asked how many hold
|
|
151
|
+
* each of its options. Asked as the page opens — a closed or full form says so before anything is typed — and again
|
|
152
|
+
* just before its answers are sent. Without it, the page keeps to its dates alone and shows no places left; its
|
|
153
|
+
* `submit` (or `save`) refuses as it would.
|
|
154
|
+
*/
|
|
155
|
+
limits?(request: LimitsRequest): Promise<LimitsResult>;
|
|
156
|
+
/**
|
|
157
|
+
* Keep a page's answers so far on the app's server, to continue from on this device or another: as they are typed
|
|
158
|
+
* (a moment after typing stops), as a wizard's step is entered, and when the person presses "Continue later"
|
|
159
|
+
* (`later`). The first time `key` is null: answer with the key the draft is kept under, and on "Continue later" a
|
|
160
|
+
* `link` to continue from (the app makes it, with the key in it) and words of the app's own ("We emailed you the
|
|
161
|
+
* link"). The answers kept are the app's to see — where people stopped, what they had written. Without it, drafts
|
|
162
|
+
* stay in the browser's store (`drafts`), as before, and no "Continue later" shows.
|
|
163
|
+
*/
|
|
164
|
+
saveDraft?(request: SaveDraftRequest): Promise<SavedDraft>;
|
|
165
|
+
/** A draft kept by `saveDraft`, by its key: what the viewer's `resume` opens. Null when there is none (sent, or gone). */
|
|
166
|
+
loadDraft?(request: LoadDraftRequest): Promise<StoredDraft | null>;
|
|
167
|
+
}
|
|
168
|
+
/** Whose possible duplicates were let be: what `notDuplicates` is asked. */
|
|
169
|
+
export interface NotDuplicatesRequest {
|
|
170
|
+
model: string;
|
|
171
|
+
/** The record shown, saved. */
|
|
172
|
+
recordId: RecordId;
|
|
173
|
+
}
|
|
174
|
+
/** A record found, said to be someone else for this one: what `markNotDuplicate` is asked. */
|
|
175
|
+
export interface MarkNotDuplicateRequest {
|
|
176
|
+
model: string;
|
|
177
|
+
/** The record shown, saved. */
|
|
178
|
+
recordId: RecordId;
|
|
179
|
+
/** The record found like it, which is someone else. */
|
|
180
|
+
matchId: RecordId;
|
|
181
|
+
}
|
|
182
|
+
/** What `limits` is asked: the page, the record (whose own choice is no other's place) and the choice fields with places. */
|
|
183
|
+
export interface LimitsRequest {
|
|
184
|
+
pageId: string;
|
|
185
|
+
/** The page's model; empty for a page of responses. */
|
|
186
|
+
model: string;
|
|
187
|
+
/** The record edited, whose own choices are not counted as another's; null for a new one or a response. */
|
|
188
|
+
recordId: RecordId | null;
|
|
189
|
+
/** The choice fields whose options have `seats`, by name: count how many hold each option. */
|
|
190
|
+
fields: string[];
|
|
191
|
+
/** The person as the app told the form (`user`), where it did: a server knows them by its own sign-in first. */
|
|
192
|
+
user?: {
|
|
193
|
+
id: RecordId | null;
|
|
194
|
+
name?: string;
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
/** How many answers a page has taken. Each part is told where the source knows it; one left out is not kept to. */
|
|
198
|
+
export interface LimitsResult {
|
|
199
|
+
/** The responses (or records) sent so far: what the page's `maxResponses` counts. */
|
|
200
|
+
responses?: number;
|
|
201
|
+
/** Those this person sent: one or more refuses another where the page says `onePerPerson`. */
|
|
202
|
+
mine?: number;
|
|
203
|
+
/** For each field asked, by option value: how many answers hold it (the record edited not counted). */
|
|
204
|
+
perChoice?: Record<string, Record<string, number>>;
|
|
205
|
+
}
|
|
206
|
+
/** A page's answers so far, as a draft keeps them: on the app's server (`saveDraft`) or in the browser's store. */
|
|
207
|
+
export interface StoredDraft {
|
|
208
|
+
/** The answers, as typed so far: where files are stored apart, no file's bytes. */
|
|
209
|
+
values: Values;
|
|
210
|
+
/** The wizard's step on screen, which the draft opens at again. */
|
|
211
|
+
step?: string | null;
|
|
212
|
+
/** The optional steps passed over with Skip. */
|
|
213
|
+
skipped?: string[];
|
|
214
|
+
/** Text typed that does not read yet, by its box's path, kept as it was typed and said again as the draft opens. */
|
|
215
|
+
unread?: Record<string, {
|
|
216
|
+
text: string;
|
|
217
|
+
message: string;
|
|
218
|
+
}>;
|
|
219
|
+
/** The fields the person answered (changed), in the page's order: where they got to. */
|
|
220
|
+
answered?: string[];
|
|
221
|
+
/** When it was kept, as ISO. */
|
|
222
|
+
savedAt: string;
|
|
223
|
+
}
|
|
224
|
+
/** What `saveDraft` is asked: the draft, and the key it was kept under before. */
|
|
225
|
+
export interface SaveDraftRequest {
|
|
226
|
+
pageId: string;
|
|
227
|
+
/** The page's model; empty for a page of responses. */
|
|
228
|
+
model: string;
|
|
229
|
+
/** The record edited; null for a new one or a response. */
|
|
230
|
+
recordId: RecordId | null;
|
|
231
|
+
/** The key the source gave this draft before; null the first time: answer with a new one. */
|
|
232
|
+
key: string | null;
|
|
233
|
+
draft: StoredDraft;
|
|
234
|
+
/** The person pressed "Continue later": the app may send them the link now, and answers with it. */
|
|
235
|
+
later?: boolean;
|
|
236
|
+
}
|
|
237
|
+
/** A draft kept on the server: its key, and after "Continue later" the link to continue from and the app's own words. */
|
|
238
|
+
export interface SavedDraft {
|
|
239
|
+
key: string;
|
|
240
|
+
/** The address to continue from, with the key in it, as the app makes it: shown with Copy. */
|
|
241
|
+
link?: string;
|
|
242
|
+
/** Words of the app's own, said as they are: "We emailed the link to mona@example.com." */
|
|
243
|
+
message?: string;
|
|
244
|
+
}
|
|
245
|
+
/** What `loadDraft` is asked: the page, and the key the draft was kept under. */
|
|
246
|
+
export interface LoadDraftRequest {
|
|
247
|
+
pageId: string;
|
|
248
|
+
key: string;
|
|
135
249
|
}
|
|
136
250
|
/** Many records made at once, each with its own values: a list's Import. */
|
|
137
251
|
export interface CreateManyRequest {
|
|
@@ -339,8 +453,16 @@ export interface ArchiveRequest extends RecordRequest {
|
|
|
339
453
|
export interface OptionsRequest {
|
|
340
454
|
/** The list's name, from the field's `optionsFrom.list`. */
|
|
341
455
|
list: string;
|
|
342
|
-
/**
|
|
456
|
+
/**
|
|
457
|
+
* Every value of the form, for a list that changes with another field (`dependsOn`). For a table's line, the line's
|
|
458
|
+
* values: its connection, for its tools.
|
|
459
|
+
*/
|
|
343
460
|
values: Values;
|
|
461
|
+
/**
|
|
462
|
+
* For a table's line — or a form editing one in a dialog — the values of the record it is on, which a line's list
|
|
463
|
+
* may change with (`parent.` in its `dependsOn`). Left out for a page's own field.
|
|
464
|
+
*/
|
|
465
|
+
parent?: Values;
|
|
344
466
|
}
|
|
345
467
|
export interface CreateRequest {
|
|
346
468
|
model: string;
|
|
@@ -380,6 +502,8 @@ export interface SaveRequest {
|
|
|
380
502
|
* the record as it is now.
|
|
381
503
|
*/
|
|
382
504
|
version?: RecordVersion;
|
|
505
|
+
/** The key of the draft these changes were kept in on the server (`saveDraft`): the source may let it go. */
|
|
506
|
+
draft?: string;
|
|
383
507
|
}
|
|
384
508
|
export interface SaveResult {
|
|
385
509
|
id: RecordId;
|
|
@@ -491,7 +615,11 @@ export interface GroupRequest extends GroupInterval {
|
|
|
491
615
|
field: string;
|
|
492
616
|
filter: ResolvedFilter[];
|
|
493
617
|
}
|
|
494
|
-
/**
|
|
618
|
+
/**
|
|
619
|
+
* The records under one value of a field: a link's by its id, a record of links (a many2many) under each of its links
|
|
620
|
+
* — tags counted as a server groups them, a list's filter counting each — and those with none as a group of their own
|
|
621
|
+
* (value null).
|
|
622
|
+
*/
|
|
495
623
|
export interface Group {
|
|
496
624
|
value: JsonValue;
|
|
497
625
|
label: string;
|
|
@@ -606,6 +734,8 @@ export interface SubmitRequest {
|
|
|
606
734
|
values: Values;
|
|
607
735
|
/** On a page with a bot check (`botCheck`): what it saw, for the app to decide on. The page never refuses a send for it. */
|
|
608
736
|
bot?: BotReport;
|
|
737
|
+
/** The key of the draft these answers were kept in on the server (`saveDraft`): the source may let it go, or mark it sent. */
|
|
738
|
+
draft?: string;
|
|
609
739
|
}
|
|
610
740
|
/**
|
|
611
741
|
* What a page's bot check saw as its answers were sent. A person never fills the hidden box and takes longer than a
|
|
@@ -623,7 +753,14 @@ export interface BotReport {
|
|
|
623
753
|
captcha?: string | null;
|
|
624
754
|
}
|
|
625
755
|
export interface SubmitResult {
|
|
756
|
+
/** The id the app gave the response: a booking's reference ("B-1043"), a ticket's number. An ending's words say it as `{id}`. */
|
|
626
757
|
id?: RecordId;
|
|
758
|
+
/**
|
|
759
|
+
* Values the app worked out as it kept the response, by the page's fields — a reference field it filled in, the time
|
|
760
|
+
* it confirmed — laid over the answers sent where an ending reads them (its `when` and its `{field}`s). The form's
|
|
761
|
+
* answers themselves stay as they were sent.
|
|
762
|
+
*/
|
|
763
|
+
values?: Values;
|
|
627
764
|
}
|
|
628
765
|
/**
|
|
629
766
|
* What changed, using the operation names Odoo gives its x2many commands, so
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-source.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/data-source.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"data-source.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/data-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-source.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/data-source.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data-source.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/data-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DateOrder } from './input-rules.mjs';
|
|
2
|
+
import type { Messages } from './messages.mjs';
|
|
3
|
+
/**
|
|
4
|
+
* A day a message names, written as the page's date boxes write one: in the page's order (`messages.dateOrder`, set on
|
|
5
|
+
* a form's own messages from its page's `look.dateOrder`: day first unless it says) and its language — "20 Oct 2026",
|
|
6
|
+
* "Oct 20, 2026", "2026-10-20". One rule for every message that names a day: a day's earliest and latest (limits.ts),
|
|
7
|
+
* the days a form opens and closes (form-limits.ts, which writes a time after it on the page's clock). As written
|
|
8
|
+
* where it reads as no day.
|
|
9
|
+
*/
|
|
10
|
+
export declare function dayWords(day: string, messages: Pick<Messages, 'locale' | 'dateOrder'>, order?: DateOrder): string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DateOrder } from './input-rules';
|
|
2
|
+
import type { Messages } from './messages';
|
|
3
|
+
/**
|
|
4
|
+
* A day a message names, written as the page's date boxes write one: in the page's order (`messages.dateOrder`, set on
|
|
5
|
+
* a form's own messages from its page's `look.dateOrder`: day first unless it says) and its language — "20 Oct 2026",
|
|
6
|
+
* "Oct 20, 2026", "2026-10-20". One rule for every message that names a day: a day's earliest and latest (limits.ts),
|
|
7
|
+
* the days a form opens and closes (form-limits.ts, which writes a time after it on the page's clock). As written
|
|
8
|
+
* where it reads as no day.
|
|
9
|
+
*/
|
|
10
|
+
export declare function dayWords(day: string, messages: Pick<Messages, 'locale' | 'dateOrder'>, order?: DateOrder): string;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.dayWords = dayWords;
|
|
4
|
+
/**
|
|
5
|
+
* A day a message names, written as the page's date boxes write one: in the page's order (`messages.dateOrder`, set on
|
|
6
|
+
* a form's own messages from its page's `look.dateOrder`: day first unless it says) and its language — "20 Oct 2026",
|
|
7
|
+
* "Oct 20, 2026", "2026-10-20". One rule for every message that names a day: a day's earliest and latest (limits.ts),
|
|
8
|
+
* the days a form opens and closes (form-limits.ts, which writes a time after it on the page's clock). As written
|
|
9
|
+
* where it reads as no day.
|
|
10
|
+
*/
|
|
11
|
+
function dayWords(day, messages, order = messages.dateOrder ?? 'dmy') {
|
|
12
|
+
const at = Date.parse(`${day}T00:00Z`);
|
|
13
|
+
if (order === 'ymd' || Number.isNaN(at))
|
|
14
|
+
return day;
|
|
15
|
+
// English as the boxes write it, the day first.
|
|
16
|
+
const format = new Intl.DateTimeFormat(messages.locale === 'en' ? 'en-GB' : messages.locale, { day: 'numeric', month: 'short', year: 'numeric', numberingSystem: 'latn', timeZone: 'UTC' });
|
|
17
|
+
if (order === 'dmy')
|
|
18
|
+
return format.format(at);
|
|
19
|
+
const parts = format.formatToParts(at);
|
|
20
|
+
const part = (type) => parts.find((one) => one.type === type)?.value ?? '';
|
|
21
|
+
return `${part('month')} ${part('day')}, ${part('year')}`;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=day-words.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"day-words.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/day-words.ts"],"names":[],"mappings":";;AAUA,4BASC;AAhBD;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,GAAW,EAAE,QAAgD,EAAE,QAAmB,QAAQ,CAAC,SAAS,IAAI,KAAK;IACpI,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAAE,OAAO,GAAG,CAAC;IACpD,gDAAgD;IAChD,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5L,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;IACnF,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A day a message names, written as the page's date boxes write one: in the page's order (`messages.dateOrder`, set on
|
|
3
|
+
* a form's own messages from its page's `look.dateOrder`: day first unless it says) and its language — "20 Oct 2026",
|
|
4
|
+
* "Oct 20, 2026", "2026-10-20". One rule for every message that names a day: a day's earliest and latest (limits.ts),
|
|
5
|
+
* the days a form opens and closes (form-limits.ts, which writes a time after it on the page's clock). As written
|
|
6
|
+
* where it reads as no day.
|
|
7
|
+
*/
|
|
8
|
+
export function dayWords(day, messages, order = messages.dateOrder ?? 'dmy') {
|
|
9
|
+
const at = Date.parse(`${day}T00:00Z`);
|
|
10
|
+
if (order === 'ymd' || Number.isNaN(at))
|
|
11
|
+
return day;
|
|
12
|
+
// English as the boxes write it, the day first.
|
|
13
|
+
const format = new Intl.DateTimeFormat(messages.locale === 'en' ? 'en-GB' : messages.locale, { day: 'numeric', month: 'short', year: 'numeric', numberingSystem: 'latn', timeZone: 'UTC' });
|
|
14
|
+
if (order === 'dmy')
|
|
15
|
+
return format.format(at);
|
|
16
|
+
const parts = format.formatToParts(at);
|
|
17
|
+
const part = (type) => parts.find((one) => one.type === type)?.value ?? '';
|
|
18
|
+
return `${part('month')} ${part('day')}, ${part('year')}`;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=day-words.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"day-words.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/day-words.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,QAAgD,EAAE,QAAmB,QAAQ,CAAC,SAAS,IAAI,KAAK;IACpI,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAAE,OAAO,GAAG,CAAC;IACpD,gDAAgD;IAChD,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5L,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;IACnF,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { StoredDraft } from './data-source.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* Drafts: what is typed kept to be offered again, in the browser's store (`drafts.store`) or on the app's server (the
|
|
4
|
+
* data source's `saveDraft` and `loadDraft`), the store keeping only its key then. A draft keeps the answers, the
|
|
5
|
+
* wizard's step and the optional steps passed over, and text typed that does not read yet, as it was typed.
|
|
6
|
+
*/
|
|
7
|
+
/** A draft as the browser's store keeps it: the draft itself, or — kept on the app's server — its key. */
|
|
8
|
+
export type KeptDraft = StoredDraft | {
|
|
9
|
+
savedAt: string;
|
|
10
|
+
key: string;
|
|
11
|
+
};
|
|
12
|
+
/** A draft read back from the browser's store, of this Fieldia or an older one (answers alone); null for none, or words that are none. */
|
|
13
|
+
export declare function draftRead(raw: string | null): KeptDraft | null;
|
|
14
|
+
/**
|
|
15
|
+
* The step a draft opens at: its own where it applies still, else the nearest before it that does — never one after
|
|
16
|
+
* it, whose questions were not reached — and the first that applies for a draft that names none (or one the page
|
|
17
|
+
* no longer has). Null for a page with no steps.
|
|
18
|
+
*/
|
|
19
|
+
export declare function resumeStep(steps: readonly string[], applies: readonly string[], step: string | null | undefined): string | null;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { StoredDraft } from './data-source';
|
|
2
|
+
/**
|
|
3
|
+
* Drafts: what is typed kept to be offered again, in the browser's store (`drafts.store`) or on the app's server (the
|
|
4
|
+
* data source's `saveDraft` and `loadDraft`), the store keeping only its key then. A draft keeps the answers, the
|
|
5
|
+
* wizard's step and the optional steps passed over, and text typed that does not read yet, as it was typed.
|
|
6
|
+
*/
|
|
7
|
+
/** A draft as the browser's store keeps it: the draft itself, or — kept on the app's server — its key. */
|
|
8
|
+
export type KeptDraft = StoredDraft | {
|
|
9
|
+
savedAt: string;
|
|
10
|
+
key: string;
|
|
11
|
+
};
|
|
12
|
+
/** A draft read back from the browser's store, of this Fieldia or an older one (answers alone); null for none, or words that are none. */
|
|
13
|
+
export declare function draftRead(raw: string | null): KeptDraft | null;
|
|
14
|
+
/**
|
|
15
|
+
* The step a draft opens at: its own where it applies still, else the nearest before it that does — never one after
|
|
16
|
+
* it, whose questions were not reached — and the first that applies for a draft that names none (or one the page
|
|
17
|
+
* no longer has). Null for a page with no steps.
|
|
18
|
+
*/
|
|
19
|
+
export declare function resumeStep(steps: readonly string[], applies: readonly string[], step: string | null | undefined): string | null;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.draftRead = draftRead;
|
|
4
|
+
exports.resumeStep = resumeStep;
|
|
5
|
+
/** A draft read back from the browser's store, of this Fieldia or an older one (answers alone); null for none, or words that are none. */
|
|
6
|
+
function draftRead(raw) {
|
|
7
|
+
if (!raw)
|
|
8
|
+
return null;
|
|
9
|
+
try {
|
|
10
|
+
const read = JSON.parse(raw);
|
|
11
|
+
if (!read || typeof read !== 'object' || typeof read['savedAt'] !== 'string')
|
|
12
|
+
return null;
|
|
13
|
+
if (typeof read['key'] === 'string')
|
|
14
|
+
return { savedAt: read['savedAt'], key: read['key'] };
|
|
15
|
+
return read['values'] && typeof read['values'] === 'object' && !Array.isArray(read['values']) ? read : null;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The step a draft opens at: its own where it applies still, else the nearest before it that does — never one after
|
|
23
|
+
* it, whose questions were not reached — and the first that applies for a draft that names none (or one the page
|
|
24
|
+
* no longer has). Null for a page with no steps.
|
|
25
|
+
*/
|
|
26
|
+
function resumeStep(steps, applies, step) {
|
|
27
|
+
if (!steps.length)
|
|
28
|
+
return null;
|
|
29
|
+
const at = step ? steps.indexOf(step) : -1;
|
|
30
|
+
for (let i = at; i >= 0; i--)
|
|
31
|
+
if (applies.includes(steps[i]))
|
|
32
|
+
return steps[i];
|
|
33
|
+
return applies[0] ?? steps[0];
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=drafts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drafts.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/drafts.ts"],"names":[],"mappings":";;AAYA,8BAUC;AAOD,gCAKC;AAvBD,0IAA0I;AAC1I,SAAgB,SAAS,CAAC,GAAkB;IAC1C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmC,CAAC;QAC/D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC1F,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3F,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,IAA+B,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1I,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,KAAwB,EAAE,OAA0B,EAAE,IAA+B;IAC9G,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** A draft read back from the browser's store, of this Fieldia or an older one (answers alone); null for none, or words that are none. */
|
|
2
|
+
export function draftRead(raw) {
|
|
3
|
+
if (!raw)
|
|
4
|
+
return null;
|
|
5
|
+
try {
|
|
6
|
+
const read = JSON.parse(raw);
|
|
7
|
+
if (!read || typeof read !== 'object' || typeof read['savedAt'] !== 'string')
|
|
8
|
+
return null;
|
|
9
|
+
if (typeof read['key'] === 'string')
|
|
10
|
+
return { savedAt: read['savedAt'], key: read['key'] };
|
|
11
|
+
return read['values'] && typeof read['values'] === 'object' && !Array.isArray(read['values']) ? read : null;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The step a draft opens at: its own where it applies still, else the nearest before it that does — never one after
|
|
19
|
+
* it, whose questions were not reached — and the first that applies for a draft that names none (or one the page
|
|
20
|
+
* no longer has). Null for a page with no steps.
|
|
21
|
+
*/
|
|
22
|
+
export function resumeStep(steps, applies, step) {
|
|
23
|
+
if (!steps.length)
|
|
24
|
+
return null;
|
|
25
|
+
const at = step ? steps.indexOf(step) : -1;
|
|
26
|
+
for (let i = at; i >= 0; i--)
|
|
27
|
+
if (applies.includes(steps[i]))
|
|
28
|
+
return steps[i];
|
|
29
|
+
return applies[0] ?? steps[0];
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=drafts.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drafts.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/drafts.ts"],"names":[],"mappings":"AAWA,0IAA0I;AAC1I,MAAM,UAAU,SAAS,CAAC,GAAkB;IAC1C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmC,CAAC;QAC/D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC1F,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3F,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,IAA+B,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1I,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,KAAwB,EAAE,OAA0B,EAAE,IAA+B;IAC9G,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC"}
|
package/src/lib/record/env.d.mts
CHANGED
|
@@ -43,4 +43,8 @@ export declare function recordContext(values: Values, fields: Record<string, Fie
|
|
|
43
43
|
* same name comes first.
|
|
44
44
|
*/
|
|
45
45
|
export declare function lineContext(values: Values, fields: Record<string, LineField>, parent: Record<string, unknown>, id?: RecordId | null): Record<string, unknown>;
|
|
46
|
-
|
|
46
|
+
/** What a form hands every expression of the app's own: its functions, and the answers of those that ask (`ExpressionEnv`). */
|
|
47
|
+
export type AppReads = Pick<ExpressionEnv, 'functions' | 'answer'>;
|
|
48
|
+
/** The name of the record a link field holds: a currency's "EGP". */
|
|
49
|
+
export declare function nameIn(values: Values, field: string): string | undefined;
|
|
50
|
+
export declare function expressionEnv(values: Values, fields: Record<string, Field | LineField>, today: () => string, app?: AppReads): ExpressionEnv;
|
package/src/lib/record/env.d.ts
CHANGED
|
@@ -43,4 +43,8 @@ export declare function recordContext(values: Values, fields: Record<string, Fie
|
|
|
43
43
|
* same name comes first.
|
|
44
44
|
*/
|
|
45
45
|
export declare function lineContext(values: Values, fields: Record<string, LineField>, parent: Record<string, unknown>, id?: RecordId | null): Record<string, unknown>;
|
|
46
|
-
|
|
46
|
+
/** What a form hands every expression of the app's own: its functions, and the answers of those that ask (`ExpressionEnv`). */
|
|
47
|
+
export type AppReads = Pick<ExpressionEnv, 'functions' | 'answer'>;
|
|
48
|
+
/** The name of the record a link field holds: a currency's "EGP". */
|
|
49
|
+
export declare function nameIn(values: Values, field: string): string | undefined;
|
|
50
|
+
export declare function expressionEnv(values: Values, fields: Record<string, Field | LineField>, today: () => string, app?: AppReads): ExpressionEnv;
|
package/src/lib/record/env.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.builtIns = builtIns;
|
|
4
4
|
exports.recordContext = recordContext;
|
|
5
5
|
exports.lineContext = lineContext;
|
|
6
|
+
exports.nameIn = nameIn;
|
|
6
7
|
exports.expressionEnv = expressionEnv;
|
|
7
8
|
const values_1 = require("./values");
|
|
8
9
|
/**
|
|
@@ -45,10 +46,17 @@ function lineContext(values, fields, parent, id = null) {
|
|
|
45
46
|
delete names[name];
|
|
46
47
|
return { ...names, ...(0, values_1.expressionContext)(values, fields) };
|
|
47
48
|
}
|
|
48
|
-
|
|
49
|
+
/** The name of the record a link field holds: a currency's "EGP". */
|
|
50
|
+
function nameIn(values, field) {
|
|
51
|
+
const value = values[field];
|
|
52
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value) && typeof value.label === 'string' ? value.label : undefined;
|
|
53
|
+
}
|
|
54
|
+
function expressionEnv(values, fields, today, app = {}) {
|
|
49
55
|
const rows = new Map();
|
|
50
56
|
return {
|
|
57
|
+
...app,
|
|
51
58
|
today,
|
|
59
|
+
nameOf: (field) => nameIn(values, field),
|
|
52
60
|
lines(name) {
|
|
53
61
|
const def = fields[name];
|
|
54
62
|
if (def?.type !== 'one2many')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/env.ts"],"names":[],"mappings":";;AAaA,4BAkBC;AAoBD,sCAEC;AAOD,kCAMC;AAED,
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/env.ts"],"names":[],"mappings":"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"}
|
package/src/lib/record/env.mjs
CHANGED
|
@@ -39,10 +39,17 @@ export function lineContext(values, fields, parent, id = null) {
|
|
|
39
39
|
delete names[name];
|
|
40
40
|
return { ...names, ...expressionContext(values, fields) };
|
|
41
41
|
}
|
|
42
|
-
|
|
42
|
+
/** The name of the record a link field holds: a currency's "EGP". */
|
|
43
|
+
export function nameIn(values, field) {
|
|
44
|
+
const value = values[field];
|
|
45
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value) && typeof value.label === 'string' ? value.label : undefined;
|
|
46
|
+
}
|
|
47
|
+
export function expressionEnv(values, fields, today, app = {}) {
|
|
43
48
|
const rows = new Map();
|
|
44
49
|
return {
|
|
50
|
+
...app,
|
|
45
51
|
today,
|
|
52
|
+
nameOf: (field) => nameIn(values, field),
|
|
46
53
|
lines(name) {
|
|
47
54
|
const def = fields[name];
|
|
48
55
|
if (def?.type !== 'one2many')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/env.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAyC,MAAM,UAAU,CAAC;AAE9F;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CACtB,MAA+B,EAC/B,QAAyB,EACzB,IAAmF,EACnF,OAAO,GAAG,IAAI,EACd,UAA+C,EAAE,EACjD,MAAgC;IAEhC,MAAM,KAAK,GAA4B;QACrC,EAAE,EAAE,QAAQ,IAAI,IAAI;QACpB,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE;QACzF,OAAO;QACP,OAAO;QACP,qEAAqE;QACrE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,IAAI,IAAI,IAAI,MAAM;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9E,OAAO,KAAK,CAAC;AACf,CAAC;AAmBD,yGAAyG;AACzG,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,MAAyC,EAAE,KAAY;IACnG,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;AAC/I,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,MAAiC,EAAE,MAA+B,EAAE,KAAsB,IAAI;IACxI,uFAAuF;IACvF,kDAAkD;IAClD,MAAM,KAAK,GAA4B,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;IACvJ,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,IAAI,IAAI,IAAI,MAAM;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9E,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,MAAyC,EAAE,KAAmB;
|
|
1
|
+
{"version":3,"file":"env.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { Option } from '../format/field.mjs';
|
|
2
|
+
import type { Page } from '../format/page.mjs';
|
|
3
|
+
import type { DataSource, LimitsResult } from './data-source.mjs';
|
|
4
|
+
import type { FormState, FormUser } from './form.mjs';
|
|
5
|
+
import { type Messages } from './messages.mjs';
|
|
6
|
+
import type { Stopped } from './run.mjs';
|
|
7
|
+
import type { Scheduler } from './scheduler.mjs';
|
|
8
|
+
import { type FormLimits, type Seats } from './taking.mjs';
|
|
9
|
+
import type { DateOrder } from './input-rules.mjs';
|
|
10
|
+
import type { Value } from './values.mjs';
|
|
11
|
+
/**
|
|
12
|
+
* A form's limits (the limits part): when the page takes answers and each choice's places, worked out from the page,
|
|
13
|
+
* the form's clock and the data source's counts — asked as it opens, again before its answers go and after — a full
|
|
14
|
+
* choice refused when picked or held. A form on a page with `limits` or options with `seats` (or an app's list whose
|
|
15
|
+
* options come with them) makes this from the part as it comes (form.ts, `limitsCode`); before, it takes answers as a
|
|
16
|
+
* page without limits does, and a save waits for it.
|
|
17
|
+
*/
|
|
18
|
+
/** What the limits ask of the form they are made for. */
|
|
19
|
+
export interface LimitsHost {
|
|
20
|
+
readonly page: Page;
|
|
21
|
+
readonly dataSource: DataSource | undefined;
|
|
22
|
+
readonly user: FormUser | undefined;
|
|
23
|
+
readonly messages: Messages;
|
|
24
|
+
readonly scheduler: Scheduler;
|
|
25
|
+
state(): FormState;
|
|
26
|
+
set(patch: Partial<FormState>): void;
|
|
27
|
+
/** Now, in ms, by the form's clock. */
|
|
28
|
+
clock(): number;
|
|
29
|
+
/** Whether the form has its state yet: a list's choices are read from it once it has. */
|
|
30
|
+
started(): boolean;
|
|
31
|
+
/** Whether what is asked now still lands on the record shown, when it answers. */
|
|
32
|
+
shownNow(): () => boolean;
|
|
33
|
+
/** The record shown's generation: another shown since a save started, it is told so. */
|
|
34
|
+
generation(): number;
|
|
35
|
+
/** The words a save says when another record was shown since it started. */
|
|
36
|
+
replaced(): string;
|
|
37
|
+
/** Whether something listens to the form: a page left open is told as it opens or closes then. */
|
|
38
|
+
listened(): boolean;
|
|
39
|
+
disposed(): boolean;
|
|
40
|
+
/** Words said under a field until it changes from what it holds, as a refused save's are. */
|
|
41
|
+
refuse(name: string, message: string): void;
|
|
42
|
+
}
|
|
43
|
+
/** A form's limits, made for it (`formLimits`). */
|
|
44
|
+
export interface Limits {
|
|
45
|
+
/** The limits shown as they are now, and the next moment they change of themselves awaited. */
|
|
46
|
+
show(): void;
|
|
47
|
+
/** Ask the source's `limits` again and show what it tells, on the record it was asked for. */
|
|
48
|
+
ask(): Promise<void>;
|
|
49
|
+
/** Whether the form asks the source for counts: a source that tells them, and something to count. */
|
|
50
|
+
asks(): boolean;
|
|
51
|
+
/** Whether the counts of a choice of an app's list whose options came with places were never told. */
|
|
52
|
+
uncounted(name: string): boolean;
|
|
53
|
+
/** Whether the page takes these answers now, asked of the source again: why not, as a save's problem, or null. */
|
|
54
|
+
stillTaking(asked: number): Promise<Stopped | null>;
|
|
55
|
+
/** A choice of a full option, picked by the person, refused under its field: the field keeps what it held. */
|
|
56
|
+
refusedFull(name: string, value: Value): boolean;
|
|
57
|
+
/** A choice held whose places filled up since it was picked, said under it: never sent. */
|
|
58
|
+
fullErrors(seen: ReadonlySet<string>, errors: Readonly<Record<string, string>>): Record<string, string>;
|
|
59
|
+
/** Something listens now, or no longer does: the timer for the page opening or closing kept, or let go. */
|
|
60
|
+
heard(listening: boolean): void;
|
|
61
|
+
dispose(): void;
|
|
62
|
+
}
|
|
63
|
+
/** What a form tells of its limits now: from the page, the clock, the options it shows and the source's last answer. */
|
|
64
|
+
export declare function limitsNow(page: Page, now: number, told: LimitsResult | null, asking: boolean, optionsOf: (field: string) => readonly Option[]): FormLimits | null;
|
|
65
|
+
/**
|
|
66
|
+
* The options of a choice's value that are full now, in the order they are held: those `before` held too left out
|
|
67
|
+
* when given — a choice made now, not one held already.
|
|
68
|
+
*/
|
|
69
|
+
export declare function fullChosen(field: Page['fields'][string] | undefined, places: Readonly<Record<string, Seats>> | undefined, value: Value | undefined, before?: Value | undefined): Option[];
|
|
70
|
+
/** A form's limits: what it tells of them, and what it asks and refuses by them. */
|
|
71
|
+
export declare function formLimits(host: LimitsHost): Limits;
|
|
72
|
+
/**
|
|
73
|
+
* A day or a day and a time in words, as the page's date boxes write one (`dayWords`): in its order (`order`, the
|
|
74
|
+
* page's `look.dateOrder`, else the messages'), its language, on its clock — "20 Nov 2026", "1 Nov 2026, 09:00" — with
|
|
75
|
+
* the zone's short name where it is not the browser's own ("09:00 EET").
|
|
76
|
+
*/
|
|
77
|
+
export declare function whenWords(written: string, at: number, messages: Messages, zone?: string, order?: DateOrder): string;
|
|
78
|
+
export declare function takingWords(page: Page, limits: FormLimits | null | undefined, messages: Messages): string | null;
|