@fieldia/designer 0.24.0 → 0.26.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 +15 -0
- package/package.json +4 -4
- package/src/lib/canvas-blocks.d.mts +4 -3
- package/src/lib/canvas-blocks.d.ts +4 -3
- package/src/lib/canvas-blocks.js +27 -1
- package/src/lib/canvas-blocks.js.map +1 -1
- package/src/lib/canvas-blocks.mjs +27 -1
- package/src/lib/canvas-blocks.mjs.map +1 -1
- package/src/lib/canvas-header.js +3 -3
- package/src/lib/canvas-header.js.map +1 -1
- package/src/lib/canvas-header.mjs +4 -4
- package/src/lib/canvas-header.mjs.map +1 -1
- package/src/lib/designer.d.mts +55 -2
- package/src/lib/designer.d.ts +55 -2
- package/src/lib/designer.js +185 -0
- package/src/lib/designer.js.map +1 -1
- package/src/lib/designer.mjs +188 -3
- package/src/lib/designer.mjs.map +1 -1
- package/src/lib/head-commands.d.mts +3 -3
- package/src/lib/head-commands.d.ts +3 -3
- package/src/lib/head-commands.js +6 -0
- package/src/lib/head-commands.js.map +1 -1
- package/src/lib/head-commands.mjs +7 -1
- package/src/lib/head-commands.mjs.map +1 -1
- package/src/lib/head-parts.d.mts +6 -1
- package/src/lib/head-parts.d.ts +6 -1
- package/src/lib/head-parts.js +30 -2
- package/src/lib/head-parts.js.map +1 -1
- package/src/lib/head-parts.mjs +30 -3
- package/src/lib/head-parts.mjs.map +1 -1
- package/src/lib/head-properties.d.mts +4 -1
- package/src/lib/head-properties.d.ts +4 -1
- package/src/lib/head-properties.js +14 -3
- package/src/lib/head-properties.js.map +1 -1
- package/src/lib/head-properties.mjs +14 -3
- package/src/lib/head-properties.mjs.map +1 -1
- package/src/lib/header-commands.d.mts +7 -2
- package/src/lib/header-commands.d.ts +7 -2
- package/src/lib/header-commands.js +11 -5
- package/src/lib/header-commands.js.map +1 -1
- package/src/lib/header-commands.mjs +9 -4
- package/src/lib/header-commands.mjs.map +1 -1
- package/src/lib/header-properties.js +3 -3
- package/src/lib/header-properties.js.map +1 -1
- package/src/lib/header-properties.mjs +4 -4
- package/src/lib/header-properties.mjs.map +1 -1
- package/src/lib/json-checks.js +10 -0
- package/src/lib/json-checks.js.map +1 -1
- package/src/lib/json-checks.mjs +10 -0
- package/src/lib/json-checks.mjs.map +1 -1
- package/src/lib/layout-changes.js +5 -0
- package/src/lib/layout-changes.js.map +1 -1
- package/src/lib/layout-changes.mjs +5 -0
- package/src/lib/layout-changes.mjs.map +1 -1
- package/src/lib/layout-ops.d.mts +3 -3
- package/src/lib/layout-ops.d.ts +3 -3
- package/src/lib/layout-ops.js +16 -5
- package/src/lib/layout-ops.js.map +1 -1
- package/src/lib/layout-ops.mjs +16 -5
- package/src/lib/layout-ops.mjs.map +1 -1
- package/src/lib/layout-tree.js +3 -1
- package/src/lib/layout-tree.js.map +1 -1
- package/src/lib/layout-tree.mjs +3 -1
- package/src/lib/layout-tree.mjs.map +1 -1
- package/src/lib/list-canvas.js +3 -1
- package/src/lib/list-canvas.js.map +1 -1
- package/src/lib/list-canvas.mjs +3 -1
- package/src/lib/list-canvas.mjs.map +1 -1
- package/src/lib/list-cards-settings.d.mts +30 -0
- package/src/lib/list-cards-settings.d.ts +30 -0
- package/src/lib/list-cards-settings.js +136 -0
- package/src/lib/list-cards-settings.js.map +1 -0
- package/src/lib/list-cards-settings.mjs +132 -0
- package/src/lib/list-cards-settings.mjs.map +1 -0
- package/src/lib/list-commands.d.mts +39 -2
- package/src/lib/list-commands.d.ts +39 -2
- package/src/lib/list-commands.js +133 -0
- package/src/lib/list-commands.js.map +1 -1
- package/src/lib/list-commands.mjs +134 -2
- package/src/lib/list-commands.mjs.map +1 -1
- package/src/lib/list-properties.js +80 -9
- package/src/lib/list-properties.js.map +1 -1
- package/src/lib/list-properties.mjs +80 -9
- package/src/lib/list-properties.mjs.map +1 -1
- package/src/lib/list-rows-settings.d.mts +31 -0
- package/src/lib/list-rows-settings.d.ts +31 -0
- package/src/lib/list-rows-settings.js +154 -0
- package/src/lib/list-rows-settings.js.map +1 -0
- package/src/lib/list-rows-settings.mjs +150 -0
- package/src/lib/list-rows-settings.mjs.map +1 -0
- package/src/lib/locales/ar/bar.js +1 -0
- package/src/lib/locales/ar/bar.js.map +1 -1
- package/src/lib/locales/ar/bar.mjs +1 -0
- package/src/lib/locales/ar/bar.mjs.map +1 -1
- package/src/lib/locales/ar/canvas.js +1 -1
- package/src/lib/locales/ar/canvas.js.map +1 -1
- package/src/lib/locales/ar/canvas.mjs +1 -1
- package/src/lib/locales/ar/canvas.mjs.map +1 -1
- package/src/lib/locales/ar/changes.js +5 -0
- package/src/lib/locales/ar/changes.js.map +1 -1
- package/src/lib/locales/ar/changes.mjs +5 -0
- package/src/lib/locales/ar/changes.mjs.map +1 -1
- package/src/lib/locales/ar/checks.js +2 -0
- package/src/lib/locales/ar/checks.js.map +1 -1
- package/src/lib/locales/ar/checks.mjs +2 -0
- package/src/lib/locales/ar/checks.mjs.map +1 -1
- package/src/lib/locales/ar/head.js +2 -0
- package/src/lib/locales/ar/head.js.map +1 -1
- package/src/lib/locales/ar/head.mjs +2 -0
- package/src/lib/locales/ar/head.mjs.map +1 -1
- package/src/lib/locales/ar/index.js +2 -1
- package/src/lib/locales/ar/index.js.map +1 -1
- package/src/lib/locales/ar/index.mjs +2 -1
- package/src/lib/locales/ar/index.mjs.map +1 -1
- package/src/lib/locales/ar/list.js +47 -1
- package/src/lib/locales/ar/list.js.map +1 -1
- package/src/lib/locales/ar/list.mjs +47 -1
- package/src/lib/locales/ar/list.mjs.map +1 -1
- package/src/lib/locales/ar/outline.js +1 -0
- package/src/lib/locales/ar/outline.js.map +1 -1
- package/src/lib/locales/ar/outline.mjs +1 -0
- package/src/lib/locales/ar/outline.mjs.map +1 -1
- package/src/lib/locales/ar/panel.js +46 -2
- package/src/lib/locales/ar/panel.js.map +1 -1
- package/src/lib/locales/ar/panel.mjs +46 -2
- package/src/lib/locales/ar/panel.mjs.map +1 -1
- package/src/lib/locales/ar/parts.js +1 -0
- package/src/lib/locales/ar/parts.js.map +1 -1
- package/src/lib/locales/ar/parts.mjs +1 -0
- package/src/lib/locales/ar/parts.mjs.map +1 -1
- package/src/lib/locales/ar/refusals.js +5 -0
- package/src/lib/locales/ar/refusals.js.map +1 -1
- package/src/lib/locales/ar/refusals.mjs +5 -0
- package/src/lib/locales/ar/refusals.mjs.map +1 -1
- package/src/lib/locales/ar/related-part.d.mts +2 -0
- package/src/lib/locales/ar/related-part.d.ts +2 -0
- package/src/lib/locales/ar/related-part.js +44 -0
- package/src/lib/locales/ar/related-part.js.map +1 -0
- package/src/lib/locales/ar/related-part.mjs +41 -0
- package/src/lib/locales/ar/related-part.mjs.map +1 -0
- package/src/lib/locales/ar/rules-ui.js +2 -0
- package/src/lib/locales/ar/rules-ui.js.map +1 -1
- package/src/lib/locales/ar/rules-ui.mjs +2 -0
- package/src/lib/locales/ar/rules-ui.mjs.map +1 -1
- package/src/lib/locales/ar/steps.js +3 -0
- package/src/lib/locales/ar/steps.js.map +1 -1
- package/src/lib/locales/ar/steps.mjs +3 -0
- package/src/lib/locales/ar/steps.mjs.map +1 -1
- package/src/lib/locales/en/bar.d.mts +2 -0
- package/src/lib/locales/en/bar.d.ts +2 -0
- package/src/lib/locales/en/bar.js +2 -0
- package/src/lib/locales/en/bar.js.map +1 -1
- package/src/lib/locales/en/bar.mjs +2 -0
- package/src/lib/locales/en/bar.mjs.map +1 -1
- package/src/lib/locales/en/canvas.d.mts +1 -0
- package/src/lib/locales/en/canvas.d.ts +1 -0
- package/src/lib/locales/en/canvas.js +1 -1
- package/src/lib/locales/en/canvas.js.map +1 -1
- package/src/lib/locales/en/canvas.mjs +1 -1
- package/src/lib/locales/en/canvas.mjs.map +1 -1
- package/src/lib/locales/en/changes.d.mts +5 -0
- package/src/lib/locales/en/changes.d.ts +5 -0
- package/src/lib/locales/en/changes.js +5 -0
- package/src/lib/locales/en/changes.js.map +1 -1
- package/src/lib/locales/en/changes.mjs +5 -0
- package/src/lib/locales/en/changes.mjs.map +1 -1
- package/src/lib/locales/en/checks.d.mts +2 -0
- package/src/lib/locales/en/checks.d.ts +2 -0
- package/src/lib/locales/en/checks.js +2 -0
- package/src/lib/locales/en/checks.js.map +1 -1
- package/src/lib/locales/en/checks.mjs +2 -0
- package/src/lib/locales/en/checks.mjs.map +1 -1
- package/src/lib/locales/en/head.d.mts +2 -0
- package/src/lib/locales/en/head.d.ts +2 -0
- package/src/lib/locales/en/head.js +2 -0
- package/src/lib/locales/en/head.js.map +1 -1
- package/src/lib/locales/en/head.mjs +2 -0
- package/src/lib/locales/en/head.mjs.map +1 -1
- package/src/lib/locales/en/index.d.mts +161 -0
- package/src/lib/locales/en/index.d.ts +161 -0
- package/src/lib/locales/en/index.js +2 -1
- package/src/lib/locales/en/index.js.map +1 -1
- package/src/lib/locales/en/index.mjs +2 -1
- package/src/lib/locales/en/index.mjs.map +1 -1
- package/src/lib/locales/en/list.d.mts +51 -0
- package/src/lib/locales/en/list.d.ts +51 -0
- package/src/lib/locales/en/list.js +49 -1
- package/src/lib/locales/en/list.js.map +1 -1
- package/src/lib/locales/en/list.mjs +49 -1
- package/src/lib/locales/en/list.mjs.map +1 -1
- package/src/lib/locales/en/outline.d.mts +1 -0
- package/src/lib/locales/en/outline.d.ts +1 -0
- package/src/lib/locales/en/outline.js +1 -0
- package/src/lib/locales/en/outline.js.map +1 -1
- package/src/lib/locales/en/outline.mjs +1 -0
- package/src/lib/locales/en/outline.mjs.map +1 -1
- package/src/lib/locales/en/panel.d.mts +29 -0
- package/src/lib/locales/en/panel.d.ts +29 -0
- package/src/lib/locales/en/panel.js +30 -2
- package/src/lib/locales/en/panel.js.map +1 -1
- package/src/lib/locales/en/panel.mjs +30 -2
- package/src/lib/locales/en/panel.mjs.map +1 -1
- package/src/lib/locales/en/parts.d.mts +1 -0
- package/src/lib/locales/en/parts.d.ts +1 -0
- package/src/lib/locales/en/parts.js +1 -0
- package/src/lib/locales/en/parts.js.map +1 -1
- package/src/lib/locales/en/parts.mjs +1 -0
- package/src/lib/locales/en/parts.mjs.map +1 -1
- package/src/lib/locales/en/refusals.d.mts +5 -0
- package/src/lib/locales/en/refusals.d.ts +5 -0
- package/src/lib/locales/en/refusals.js +5 -0
- package/src/lib/locales/en/refusals.js.map +1 -1
- package/src/lib/locales/en/refusals.mjs +5 -0
- package/src/lib/locales/en/refusals.mjs.map +1 -1
- package/src/lib/locales/en/related-part.d.mts +63 -0
- package/src/lib/locales/en/related-part.d.ts +63 -0
- package/src/lib/locales/en/related-part.js +49 -0
- package/src/lib/locales/en/related-part.js.map +1 -0
- package/src/lib/locales/en/related-part.mjs +46 -0
- package/src/lib/locales/en/related-part.mjs.map +1 -0
- package/src/lib/locales/en/rules-ui.d.mts +2 -0
- package/src/lib/locales/en/rules-ui.d.ts +2 -0
- package/src/lib/locales/en/rules-ui.js +2 -0
- package/src/lib/locales/en/rules-ui.js.map +1 -1
- package/src/lib/locales/en/rules-ui.mjs +2 -0
- package/src/lib/locales/en/rules-ui.mjs.map +1 -1
- package/src/lib/locales/en/steps.d.mts +3 -0
- package/src/lib/locales/en/steps.d.ts +3 -0
- package/src/lib/locales/en/steps.js +3 -0
- package/src/lib/locales/en/steps.js.map +1 -1
- package/src/lib/locales/en/steps.mjs +3 -0
- package/src/lib/locales/en/steps.mjs.map +1 -1
- package/src/lib/outline-rows.js +1 -0
- package/src/lib/outline-rows.js.map +1 -1
- package/src/lib/outline-rows.mjs +1 -0
- package/src/lib/outline-rows.mjs.map +1 -1
- package/src/lib/page-checks.d.mts +9 -0
- package/src/lib/page-checks.d.ts +9 -0
- package/src/lib/page-checks.js +20 -1
- package/src/lib/page-checks.js.map +1 -1
- package/src/lib/page-checks.mjs +20 -1
- package/src/lib/page-checks.mjs.map +1 -1
- package/src/lib/page-tree.d.mts +3 -1
- package/src/lib/page-tree.d.ts +3 -1
- package/src/lib/page-tree.js +31 -2
- package/src/lib/page-tree.js.map +1 -1
- package/src/lib/page-tree.mjs +30 -2
- package/src/lib/page-tree.mjs.map +1 -1
- package/src/lib/panel-block.js +4 -0
- package/src/lib/panel-block.js.map +1 -1
- package/src/lib/panel-block.mjs +4 -0
- package/src/lib/panel-block.mjs.map +1 -1
- package/src/lib/panel-field.js +4 -1
- package/src/lib/panel-field.js.map +1 -1
- package/src/lib/panel-field.mjs +4 -1
- package/src/lib/panel-field.mjs.map +1 -1
- package/src/lib/panel-group.js +4 -1
- package/src/lib/panel-group.js.map +1 -1
- package/src/lib/panel-group.mjs +4 -1
- package/src/lib/panel-group.mjs.map +1 -1
- package/src/lib/panel-page.js +51 -1
- package/src/lib/panel-page.js.map +1 -1
- package/src/lib/panel-page.mjs +51 -1
- package/src/lib/panel-page.mjs.map +1 -1
- package/src/lib/panel-parts.js +5 -1
- package/src/lib/panel-parts.js.map +1 -1
- package/src/lib/panel-parts.mjs +5 -1
- package/src/lib/panel-parts.mjs.map +1 -1
- package/src/lib/panel-related.d.mts +4 -0
- package/src/lib/panel-related.d.ts +4 -0
- package/src/lib/panel-related.js +206 -0
- package/src/lib/panel-related.js.map +1 -0
- package/src/lib/panel-related.mjs +203 -0
- package/src/lib/panel-related.mjs.map +1 -0
- package/src/lib/panel-screen.js +1 -0
- package/src/lib/panel-screen.js.map +1 -1
- package/src/lib/panel-screen.mjs +1 -0
- package/src/lib/panel-screen.mjs.map +1 -1
- package/src/lib/print-setting.d.mts +16 -0
- package/src/lib/print-setting.d.ts +16 -0
- package/src/lib/print-setting.js +33 -0
- package/src/lib/print-setting.js.map +1 -0
- package/src/lib/print-setting.mjs +29 -0
- package/src/lib/print-setting.mjs.map +1 -0
- package/src/lib/publish-ui.js +6 -3
- package/src/lib/publish-ui.js.map +1 -1
- package/src/lib/publish-ui.mjs +6 -3
- package/src/lib/publish-ui.mjs.map +1 -1
- package/src/lib/records-settings.d.mts +14 -0
- package/src/lib/records-settings.d.ts +14 -0
- package/src/lib/records-settings.js +54 -0
- package/src/lib/records-settings.js.map +1 -0
- package/src/lib/records-settings.mjs +51 -0
- package/src/lib/records-settings.mjs.map +1 -0
- package/src/lib/screen-editor.js +3 -0
- package/src/lib/screen-editor.js.map +1 -1
- package/src/lib/screen-editor.mjs +3 -0
- package/src/lib/screen-editor.mjs.map +1 -1
- package/src/lib/screen-properties.js +5 -1
- package/src/lib/screen-properties.js.map +1 -1
- package/src/lib/screen-properties.mjs +5 -1
- package/src/lib/screen-properties.mjs.map +1 -1
- package/src/lib/steps-checks.js +6 -2
- package/src/lib/steps-checks.js.map +1 -1
- package/src/lib/steps-checks.mjs +6 -2
- package/src/lib/steps-checks.mjs.map +1 -1
- package/src/lib/steps-editor.js +1 -1
- package/src/lib/steps-editor.js.map +1 -1
- package/src/lib/steps-editor.mjs +1 -1
- package/src/lib/steps-editor.mjs.map +1 -1
- package/src/lib/steps-settings.js +3 -0
- package/src/lib/steps-settings.js.map +1 -1
- package/src/lib/steps-settings.mjs +3 -0
- package/src/lib/steps-settings.mjs.map +1 -1
- package/src/lib/steps-words.js +5 -1
- package/src/lib/steps-words.js.map +1 -1
- package/src/lib/steps-words.mjs +5 -1
- package/src/lib/steps-words.mjs.map +1 -1
- package/src/lib/styles-json.d.mts +1 -1
- package/src/lib/styles-json.d.ts +1 -1
- package/src/lib/styles-json.js +3 -0
- package/src/lib/styles-json.js.map +1 -1
- package/src/lib/styles-json.mjs +3 -0
- package/src/lib/styles-json.mjs.map +1 -1
- package/src/lib/styles-kinds.d.mts +1 -1
- package/src/lib/styles-kinds.d.ts +1 -1
- package/src/lib/styles-kinds.js +12 -0
- package/src/lib/styles-kinds.js.map +1 -1
- package/src/lib/styles-kinds.mjs +12 -0
- package/src/lib/styles-kinds.mjs.map +1 -1
- package/src/lib/styles.d.mts +1 -1
- package/src/lib/styles.d.ts +1 -1
- package/src/lib/styles.js +1 -0
- package/src/lib/styles.js.map +1 -1
- package/src/lib/styles.mjs +1 -0
- package/src/lib/styles.mjs.map +1 -1
- package/src/lib/toolbox.d.mts +3 -0
- package/src/lib/toolbox.d.ts +3 -0
- package/src/lib/toolbox.js +13 -3
- package/src/lib/toolbox.js.map +1 -1
- package/src/lib/toolbox.mjs +13 -3
- package/src/lib/toolbox.mjs.map +1 -1
- package/src/lib/try-drawer.js +7 -1
- package/src/lib/try-drawer.js.map +1 -1
- package/src/lib/try-drawer.mjs +7 -1
- package/src/lib/try-drawer.mjs.map +1 -1
package/src/lib/designer.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type AnswerRule, type BotCheck, type ColumnCount, type ColumnsByWidth, type Field, type LabelPlace, type OptionsFrom, type PartLookKind, type HelpShown, type InputMode, type JsonValue, type MapFence, type MapLayer, type MapNode, type Page, type PageLook, type SetWhen } from '@fieldia/core';
|
|
1
|
+
import { type AnswerRule, type BotCheck, type ColumnCount, type ColumnsByWidth, type Field, type LabelPlace, type OptionsFrom, type PartLookKind, type HelpShown, type InputMode, type JsonValue, type MapFence, type MapLayer, type MapNode, type LinkedField, type ListCard, type Page, type PageLook, type RelatedNode, type SetWhen } from '@fieldia/core';
|
|
2
2
|
import { type Condition, type ShownWhile } from './conditions';
|
|
3
3
|
import { type HeaderCommands } from './header-commands';
|
|
4
|
-
import { type ListCommands } from './list-commands';
|
|
4
|
+
import { type ListCommands, type RowRulesPatch } from './list-commands';
|
|
5
5
|
import { type OptionDetails } from './kind-commands';
|
|
6
6
|
import { type ChoiceCommands } from './choice-commands';
|
|
7
7
|
import { type InputCommands } from './input-commands';
|
|
@@ -207,6 +207,8 @@ export interface Designer extends HeaderCommands, ListCommands, ChoiceCommands,
|
|
|
207
207
|
} | null): boolean;
|
|
208
208
|
/** The roles a part shows to (Flectra's groups=), `!` before one hiding it from people holding it; null shows it to everyone. */
|
|
209
209
|
setRoles(id: string, roles: string[] | null): boolean;
|
|
210
|
+
/** Whether a field, a group, a tab or a related list prints with its record; false leaves it off paper (`"print": false`). */
|
|
211
|
+
setPrinted(id: string, printed: boolean): boolean;
|
|
210
212
|
/** A part shown only while the record is edited, only while it is read, or always: Flectra's oe_edit_only and oe_read_only. */
|
|
211
213
|
setShownWhile(id: string, mode: ShownWhile): boolean;
|
|
212
214
|
/**
|
|
@@ -233,6 +235,33 @@ export interface Designer extends HeaderCommands, ListCommands, ChoiceCommands,
|
|
|
233
235
|
}): boolean;
|
|
234
236
|
/** A public page's bot check (`botCheck`): a hidden box, the fewest seconds, the slot its captcha is drawn in; null takes it off. A page of responses only. */
|
|
235
237
|
setBotCheck(check: BotCheck | null): boolean;
|
|
238
|
+
/** What a printout of the page carries (`print`): its header and footer words, the app's logo by its address; empty or null takes one away. */
|
|
239
|
+
setPrint(patch: {
|
|
240
|
+
header?: string | null;
|
|
241
|
+
footer?: string | null;
|
|
242
|
+
logo?: string | null;
|
|
243
|
+
}): boolean;
|
|
244
|
+
/**
|
|
245
|
+
* A record page's possible duplicates (`duplicates`): the fields records like the one typed are found by — `null`
|
|
246
|
+
* or none takes the setting away — and when they are asked for, as typed (`type`, the default: `null`) or only as
|
|
247
|
+
* the record is saved (`save`).
|
|
248
|
+
*/
|
|
249
|
+
setDuplicates(patch: {
|
|
250
|
+
fields?: string[] | null;
|
|
251
|
+
on?: 'type' | 'save' | null;
|
|
252
|
+
}): boolean;
|
|
253
|
+
/**
|
|
254
|
+
* What the page's records are called (`records`), so Fieldia's sentences name them: the words for one and for more
|
|
255
|
+
* — both, or neither (`null`, or both empty, takes the setting away) — and for one with its article (`a`, empty takes
|
|
256
|
+
* it away). Each kept as typed, its ends trimmed. Refused with only one of the two words.
|
|
257
|
+
*/
|
|
258
|
+
setRecords(records: {
|
|
259
|
+
one: string;
|
|
260
|
+
other: string;
|
|
261
|
+
a?: string;
|
|
262
|
+
} | null): boolean;
|
|
263
|
+
/** A field's label written small inside Fieldia's sentences (`lowerLabels`), the page's own setting; false takes it away. */
|
|
264
|
+
setLowerLabels(on: boolean): boolean;
|
|
236
265
|
/**
|
|
237
266
|
* The page's phone numbers (`phone`): read the world over (`on`), or text boxes as typed (`on: false` takes the
|
|
238
267
|
* setting away); the country a number typed without its + is read in, and whether a number shows abroad's way or at
|
|
@@ -386,6 +415,12 @@ export interface Designer extends HeaderCommands, ListCommands, ChoiceCommands,
|
|
|
386
415
|
tools?: NonNullable<MapNode['tools']> | null;
|
|
387
416
|
fences?: MapFence[] | null;
|
|
388
417
|
}): boolean;
|
|
418
|
+
/**
|
|
419
|
+
* A related list's title, the model of its records and their link to this record, its columns (each a field of
|
|
420
|
+
* theirs, by name, with its definition: a column taken away takes its cells, order and search with it), its rows a
|
|
421
|
+
* page, New, and View all's page and where it opens; `null` takes the rows or View all away.
|
|
422
|
+
*/
|
|
423
|
+
updateRelated(id: string, patch: RelatedPatch): boolean;
|
|
389
424
|
/**
|
|
390
425
|
* Several parts' widths as one edit: two trading width across the gutter
|
|
391
426
|
* between them. With `twelfths`, widths are twelfths of their row, and a
|
|
@@ -542,3 +577,21 @@ export interface RegionSet {
|
|
|
542
577
|
nameKey?: string;
|
|
543
578
|
numbers?: readonly string[];
|
|
544
579
|
}
|
|
580
|
+
/** What a related list's panel changes (`updateRelated`). */
|
|
581
|
+
export interface RelatedPatch extends RowRulesPatch {
|
|
582
|
+
title?: string;
|
|
583
|
+
model?: string;
|
|
584
|
+
field?: string;
|
|
585
|
+
/** Its columns, in order: each a field of its records, by name, with its definition. */
|
|
586
|
+
columns?: {
|
|
587
|
+
name: string;
|
|
588
|
+
field: LinkedField;
|
|
589
|
+
}[];
|
|
590
|
+
limit?: number | null;
|
|
591
|
+
create?: boolean;
|
|
592
|
+
/** Where a row's record and New's open: a dialog (the default, not written), or the app's own way. */
|
|
593
|
+
open?: NonNullable<RelatedNode['open']>;
|
|
594
|
+
viewAll?: NonNullable<RelatedNode['viewAll']> | null;
|
|
595
|
+
/** Its records as cards on a phone, as a list's: what a card shows ({} for the columns'); null for none. */
|
|
596
|
+
card?: ListCard | null;
|
|
597
|
+
}
|
package/src/lib/designer.js
CHANGED
|
@@ -21,6 +21,7 @@ const ops = require("./layout-ops");
|
|
|
21
21
|
const settings = require("./layout-settings");
|
|
22
22
|
const twelfths = require("./layout-twelfths");
|
|
23
23
|
const several = require("./layout-several");
|
|
24
|
+
const print_setting_1 = require("./print-setting");
|
|
24
25
|
const page_tree_1 = require("./page-tree");
|
|
25
26
|
const layout_tree_1 = require("./layout-tree");
|
|
26
27
|
const refusal_1 = require("./refusal");
|
|
@@ -31,6 +32,7 @@ const head_commands_1 = require("./head-commands");
|
|
|
31
32
|
const rules_reads_1 = require("./rules-reads");
|
|
32
33
|
const steps_commands_1 = require("./steps-commands");
|
|
33
34
|
const steps_places_1 = require("./steps-places");
|
|
35
|
+
const head_parts_1 = require("./head-parts");
|
|
34
36
|
const clipboard = require("./clipboard-ops");
|
|
35
37
|
const moves = require("./outline-moves");
|
|
36
38
|
const outline_rows_1 = require("./outline-rows");
|
|
@@ -288,6 +290,10 @@ function createDesigner(options) {
|
|
|
288
290
|
(0, rules_reads_1.keepWhatRulesRead)(page, draft);
|
|
289
291
|
// steps lane: a tab or step taken away takes the steps that go to it, and its own, with it.
|
|
290
292
|
(0, steps_places_1.forgetGoneTargets)(draft);
|
|
293
|
+
// A field taken away, or made a kind records are not compared by, is no longer one possible duplicates are found by.
|
|
294
|
+
forgetGoneDuplicates(draft);
|
|
295
|
+
// A related list taken out of a tab takes the tab's count of it with it.
|
|
296
|
+
(0, head_parts_1.forgetGoneCounts)(draft);
|
|
291
297
|
const checked = checkEdit(page, draft);
|
|
292
298
|
if (!checked.ok) {
|
|
293
299
|
// A number setting the format refuses is said in its own words, in the designer's language: never a raw path.
|
|
@@ -913,6 +919,17 @@ function createDesigner(options) {
|
|
|
913
919
|
delete target.roles;
|
|
914
920
|
});
|
|
915
921
|
},
|
|
922
|
+
setPrinted(id, printed) {
|
|
923
|
+
return apply((draft) => {
|
|
924
|
+
const target = (0, print_setting_1.printablePart)(draft, id);
|
|
925
|
+
if (!target)
|
|
926
|
+
throw new refusal_1.Refusal((w) => w.refusals.noElement(id));
|
|
927
|
+
if (printed)
|
|
928
|
+
delete target.print;
|
|
929
|
+
else
|
|
930
|
+
target.print = false;
|
|
931
|
+
});
|
|
932
|
+
},
|
|
916
933
|
setRule(id, which, condition) {
|
|
917
934
|
return apply((draft) => {
|
|
918
935
|
const found = (0, page_tree_1.findNode)(draft, id);
|
|
@@ -1001,6 +1018,61 @@ function createDesigner(options) {
|
|
|
1001
1018
|
}
|
|
1002
1019
|
}, `page:${Object.keys(info).join(',')}`);
|
|
1003
1020
|
},
|
|
1021
|
+
setPrint(patch) {
|
|
1022
|
+
return apply((draft) => {
|
|
1023
|
+
const print = { ...draft.print };
|
|
1024
|
+
for (const key of ['header', 'footer', 'logo']) {
|
|
1025
|
+
if (patch[key] === undefined)
|
|
1026
|
+
continue;
|
|
1027
|
+
const value = patch[key]?.trim() ?? '';
|
|
1028
|
+
if (!value)
|
|
1029
|
+
delete print[key];
|
|
1030
|
+
// An address an image is drawn from: never a script's, nor words.
|
|
1031
|
+
else if (key === 'logo' && !/^(https?:\/\/|data:image\/|\/|\.{0,2}\/?[^:\s]+$)/i.test(value))
|
|
1032
|
+
throw new refusal_1.Refusal((w) => w.refusals.logoAddress);
|
|
1033
|
+
else
|
|
1034
|
+
print[key] = key === 'logo' ? value : patch[key];
|
|
1035
|
+
}
|
|
1036
|
+
if (Object.keys(print).length)
|
|
1037
|
+
draft.print = print;
|
|
1038
|
+
else
|
|
1039
|
+
delete draft.print;
|
|
1040
|
+
}, `print:${Object.keys(patch).join(',')}`);
|
|
1041
|
+
},
|
|
1042
|
+
setRecords(records) {
|
|
1043
|
+
return apply((draft) => {
|
|
1044
|
+
const one = records?.one.trim() ?? '';
|
|
1045
|
+
const other = records?.other.trim() ?? '';
|
|
1046
|
+
// No words: the records unnamed, the labels small alone where asked.
|
|
1047
|
+
if (!one && !other)
|
|
1048
|
+
return void delete draft.records;
|
|
1049
|
+
if (!one || !other)
|
|
1050
|
+
throw new refusal_1.Refusal((w) => w.refusals.recordsBoth);
|
|
1051
|
+
const a = records?.a?.trim();
|
|
1052
|
+
draft.records = { one, other, ...(a ? { a } : {}) };
|
|
1053
|
+
}, 'records');
|
|
1054
|
+
},
|
|
1055
|
+
setLowerLabels(on) {
|
|
1056
|
+
return apply((draft) => {
|
|
1057
|
+
if (on)
|
|
1058
|
+
draft.lowerLabels = true;
|
|
1059
|
+
else
|
|
1060
|
+
delete draft.lowerLabels;
|
|
1061
|
+
}, 'lowerLabels');
|
|
1062
|
+
},
|
|
1063
|
+
setDuplicates(patch) {
|
|
1064
|
+
return apply((draft) => {
|
|
1065
|
+
if (patch.fields !== undefined && !patch.fields?.length)
|
|
1066
|
+
return void delete draft.duplicates;
|
|
1067
|
+
if (draft.data.kind !== 'record' || draft.layout.type === 'list')
|
|
1068
|
+
throw new refusal_1.Refusal((w) => w.refusals.duplicatesForRecords);
|
|
1069
|
+
const fields = patch.fields ?? draft.duplicates?.fields ?? [];
|
|
1070
|
+
if (!fields.length)
|
|
1071
|
+
return;
|
|
1072
|
+
const on = patch.on === undefined ? draft.duplicates?.on : (patch.on ?? undefined);
|
|
1073
|
+
draft.duplicates = { fields: [...new Set(fields)], ...(on === 'save' ? { on } : {}) };
|
|
1074
|
+
}, null);
|
|
1075
|
+
},
|
|
1004
1076
|
setBotCheck(check) {
|
|
1005
1077
|
return apply((draft) => {
|
|
1006
1078
|
if (!check)
|
|
@@ -1301,6 +1373,12 @@ function createDesigner(options) {
|
|
|
1301
1373
|
if (!draft.fields[name] && model[name])
|
|
1302
1374
|
draft.fields[name] = model[name];
|
|
1303
1375
|
}, `map:${id}:${Object.keys(patch).join(',')}`),
|
|
1376
|
+
updateRelated: (id, patch) => apply((draft) => {
|
|
1377
|
+
const node = (0, page_tree_1.findNode)(draft, id)?.node;
|
|
1378
|
+
if (!node || node.type !== 'related')
|
|
1379
|
+
throw new refusal_1.Refusal((w) => w.layout.noPart(id));
|
|
1380
|
+
changeRelated(draft, node, patch);
|
|
1381
|
+
}, `related:${id}:${Object.keys(patch).join(',')}`),
|
|
1304
1382
|
setWidths: (widths, options) => apply((draft) => settings.setWidths(draft, widths, options?.twelfths)),
|
|
1305
1383
|
// rules lane
|
|
1306
1384
|
...(0, rules_commands_1.rulesCommands)({ apply, getPage: () => page, fromModel }),
|
|
@@ -1406,4 +1484,111 @@ createDesigner.open = async (id, store, options = {}) => {
|
|
|
1406
1484
|
function statusbarOf(page, id) {
|
|
1407
1485
|
return id === '#statusbar' && page.layout.type === 'sheet' ? page.layout.statusbar : undefined;
|
|
1408
1486
|
}
|
|
1487
|
+
/** A related list changed as asked: names that are no field's refused, and what named a column taken away gone with it. */
|
|
1488
|
+
function changeRelated(draft, node, patch) {
|
|
1489
|
+
const named = (name) => {
|
|
1490
|
+
if (!core_2.FIELD_NAME.test(name))
|
|
1491
|
+
throw new refusal_1.Refusal((w) => w.relatedPart.notAName(name));
|
|
1492
|
+
};
|
|
1493
|
+
if (patch.title !== undefined) {
|
|
1494
|
+
if (patch.title.trim())
|
|
1495
|
+
node.title = patch.title;
|
|
1496
|
+
else
|
|
1497
|
+
delete node.title;
|
|
1498
|
+
}
|
|
1499
|
+
if (patch.model !== undefined) {
|
|
1500
|
+
if (!patch.model.trim())
|
|
1501
|
+
throw new refusal_1.Refusal((w) => w.relatedPart.noModel);
|
|
1502
|
+
node.model = patch.model.trim();
|
|
1503
|
+
}
|
|
1504
|
+
if (patch.field !== undefined) {
|
|
1505
|
+
named(patch.field);
|
|
1506
|
+
node.field = patch.field;
|
|
1507
|
+
}
|
|
1508
|
+
if (patch.columns !== undefined) {
|
|
1509
|
+
if (!patch.columns.length)
|
|
1510
|
+
throw new refusal_1.Refusal((w) => w.relatedPart.lastColumn);
|
|
1511
|
+
const names = patch.columns.map((column) => column.name);
|
|
1512
|
+
names.forEach(named);
|
|
1513
|
+
const twice = names.find((name, i) => names.indexOf(name) !== i);
|
|
1514
|
+
if (twice)
|
|
1515
|
+
throw new refusal_1.Refusal((w) => w.relatedPart.columnTwice(twice));
|
|
1516
|
+
// Fields shown in no column stay (the link, an amount's currency); a column taken away goes, and what named it.
|
|
1517
|
+
const fields = Object.fromEntries(Object.entries(node.fields).filter(([name]) => !node.columns.includes(name) || names.includes(name)));
|
|
1518
|
+
for (const column of patch.columns)
|
|
1519
|
+
fields[column.name] = JSON.parse(JSON.stringify(column.field));
|
|
1520
|
+
node.fields = fields;
|
|
1521
|
+
node.columns = names;
|
|
1522
|
+
if (node.cells) {
|
|
1523
|
+
for (const name of Object.keys(node.cells))
|
|
1524
|
+
if (!names.includes(name))
|
|
1525
|
+
delete node.cells[name];
|
|
1526
|
+
if (!Object.keys(node.cells).length)
|
|
1527
|
+
delete node.cells;
|
|
1528
|
+
}
|
|
1529
|
+
if (node.sort) {
|
|
1530
|
+
node.sort = node.sort.filter((order) => Object.prototype.hasOwnProperty.call(fields, order.field));
|
|
1531
|
+
if (!node.sort.length)
|
|
1532
|
+
delete node.sort;
|
|
1533
|
+
}
|
|
1534
|
+
if (node.searchFields) {
|
|
1535
|
+
node.searchFields = node.searchFields.filter((name) => Object.prototype.hasOwnProperty.call(fields, name));
|
|
1536
|
+
if (!node.searchFields.length)
|
|
1537
|
+
delete node.searchFields;
|
|
1538
|
+
}
|
|
1539
|
+
}
|
|
1540
|
+
if (patch.limit === null)
|
|
1541
|
+
delete node.limit;
|
|
1542
|
+
else if (patch.limit !== undefined)
|
|
1543
|
+
node.limit = patch.limit;
|
|
1544
|
+
if (patch.create === true)
|
|
1545
|
+
delete node.create;
|
|
1546
|
+
else if (patch.create === false)
|
|
1547
|
+
node.create = false;
|
|
1548
|
+
if (patch.open === 'app')
|
|
1549
|
+
node.open = 'app';
|
|
1550
|
+
else if (patch.open === 'dialog')
|
|
1551
|
+
delete node.open;
|
|
1552
|
+
if (patch.viewAll === null)
|
|
1553
|
+
delete node.viewAll;
|
|
1554
|
+
else if (patch.viewAll !== undefined)
|
|
1555
|
+
node.viewAll = { page: patch.viewAll.page, ...(patch.viewAll.as && patch.viewAll.as !== 'dialog' ? { as: patch.viewAll.as } : {}) };
|
|
1556
|
+
if (patch.card === null)
|
|
1557
|
+
delete node.card;
|
|
1558
|
+
else if (patch.card !== undefined) {
|
|
1559
|
+
// Its card shows its own records' fields: one that is not theirs is refused, as a column's name is.
|
|
1560
|
+
for (const name of (0, page_tree_1.listCardFields)(patch.card)) {
|
|
1561
|
+
named(name);
|
|
1562
|
+
if (!Object.prototype.hasOwnProperty.call(node.fields, name))
|
|
1563
|
+
throw new refusal_1.Refusal((w) => w.relatedPart.notTheirs(name));
|
|
1564
|
+
}
|
|
1565
|
+
node.card = JSON.parse(JSON.stringify(patch.card));
|
|
1566
|
+
}
|
|
1567
|
+
// Its rows' own rules, as a list's: each condition read on a row's record — its own fields, its id, the person.
|
|
1568
|
+
(0, list_commands_1.setRowRules)(node, patch, draft, { ...draft, fields: node.fields });
|
|
1569
|
+
// A field taken away with its column goes from the card too: its lines, its title, picture and status.
|
|
1570
|
+
if (patch.columns !== undefined && node.card) {
|
|
1571
|
+
const card = node.card;
|
|
1572
|
+
for (const key of ['title', 'subtitle', 'image', 'status'])
|
|
1573
|
+
if (card[key] !== undefined && !Object.prototype.hasOwnProperty.call(node.fields, card[key]))
|
|
1574
|
+
delete card[key];
|
|
1575
|
+
if (card.fields) {
|
|
1576
|
+
const kept = card.fields.filter((line) => (Array.isArray(line) ? line : [line]).every((part) => Object.prototype.hasOwnProperty.call(node.fields, typeof part === 'string' ? part : part.field)));
|
|
1577
|
+
if (kept.length)
|
|
1578
|
+
card.fields = kept;
|
|
1579
|
+
else
|
|
1580
|
+
delete card.fields;
|
|
1581
|
+
}
|
|
1582
|
+
}
|
|
1583
|
+
}
|
|
1584
|
+
/** The fields possible duplicates are found by (`duplicates`) that are still on the page and of a kind to compare: none left, the setting goes. */
|
|
1585
|
+
function forgetGoneDuplicates(page) {
|
|
1586
|
+
if (!page.duplicates)
|
|
1587
|
+
return;
|
|
1588
|
+
const fields = page.duplicates.fields.filter((name) => (0, core_2.comparable)(page.fields[name]));
|
|
1589
|
+
if (!fields.length)
|
|
1590
|
+
delete page.duplicates;
|
|
1591
|
+
else if (fields.length !== page.duplicates.fields.length)
|
|
1592
|
+
page.duplicates = { ...page.duplicates, fields };
|
|
1593
|
+
}
|
|
1409
1594
|
//# sourceMappingURL=designer.js.map
|