@cratis/scene.blueprint.default 4.40.0 → 4.42.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/ComponentName.ts +9 -0
- package/defaultBlueprint.ts +1 -0
- package/defaultBlueprintComponents.ts +4 -1
- package/dist/cjs/ComponentName.js +3 -0
- package/dist/cjs/ComponentName.js.map +1 -1
- package/dist/cjs/defaultBlueprint.js +20 -1
- package/dist/cjs/defaultBlueprint.js.map +1 -1
- package/dist/cjs/defaultBlueprintComponentMetadata.js +11 -0
- package/dist/cjs/defaultBlueprintComponentMetadata.js.map +1 -1
- package/dist/cjs/defaultBlueprintComponents.js +17 -0
- package/dist/cjs/defaultBlueprintComponents.js.map +1 -1
- package/dist/cjs/foundation/ActionButton.js.map +1 -1
- package/dist/cjs/foundation/ActionButtonControl.js +46 -0
- package/dist/cjs/foundation/ActionButtonControl.js.map +1 -0
- package/dist/cjs/foundation/DialogFrame.js +196 -0
- package/dist/cjs/foundation/DialogFrame.js.map +1 -0
- package/dist/cjs/foundation/FormScreenBody.js +13 -3
- package/dist/cjs/foundation/FormScreenBody.js.map +1 -1
- package/dist/cjs/foundation/Notice.js +51 -0
- package/dist/cjs/foundation/Notice.js.map +1 -0
- package/dist/cjs/foundation/formModel.js +1 -0
- package/dist/cjs/foundation/formModel.js.map +1 -1
- package/dist/cjs/foundation/foundationComponentMetadata.js +22 -0
- package/dist/cjs/foundation/foundationComponentMetadata.js.map +1 -1
- package/dist/cjs/foundation/foundationDescriptors.js +89 -0
- package/dist/cjs/foundation/foundationDescriptors.js.map +1 -1
- package/dist/cjs/foundation/foundationSamples.js +29 -0
- package/dist/cjs/foundation/foundationSamples.js.map +1 -1
- package/dist/cjs/foundation/foundationStrings.js +3 -1
- package/dist/cjs/foundation/foundationStrings.js.map +1 -1
- package/dist/cjs/foundation/templates/boardScreenTemplate.js +76 -0
- package/dist/cjs/foundation/templates/boardScreenTemplate.js.map +1 -0
- package/dist/cjs/foundation/templates/dashboardScreenTemplate.js +128 -0
- package/dist/cjs/foundation/templates/dashboardScreenTemplate.js.map +1 -0
- package/dist/cjs/foundation/templates/dialogTemplates.js +254 -0
- package/dist/cjs/foundation/templates/dialogTemplates.js.map +1 -0
- package/dist/cjs/foundation/templates/formScreenTemplate.js +71 -0
- package/dist/cjs/foundation/templates/formScreenTemplate.js.map +1 -0
- package/dist/cjs/foundation/templates/index.js +57 -0
- package/dist/cjs/foundation/templates/index.js.map +1 -0
- package/dist/cjs/foundation/templates/listScreenTemplate.js +124 -0
- package/dist/cjs/foundation/templates/listScreenTemplate.js.map +1 -0
- package/dist/cjs/foundation/templates/masterDetailScreenTemplate.js +79 -0
- package/dist/cjs/foundation/templates/masterDetailScreenTemplate.js.map +1 -0
- package/dist/cjs/foundation/templates/recordPageTemplate.js +137 -0
- package/dist/cjs/foundation/templates/recordPageTemplate.js.map +1 -0
- package/dist/cjs/foundation/templates/stateScreenTemplates.js +252 -0
- package/dist/cjs/foundation/templates/stateScreenTemplates.js.map +1 -0
- package/dist/cjs/foundation/templates/templateParts.js +38 -0
- package/dist/cjs/foundation/templates/templateParts.js.map +1 -0
- package/dist/cjs/foundation/templates/wizardScreenTemplate.js +95 -0
- package/dist/cjs/foundation/templates/wizardScreenTemplate.js.map +1 -0
- package/dist/cjs/foundation/templates/workspaceScreenTemplate.js +62 -0
- package/dist/cjs/foundation/templates/workspaceScreenTemplate.js.map +1 -0
- package/dist/cjs/gallery/GalleryDialogPreview.js +62 -0
- package/dist/cjs/gallery/GalleryDialogPreview.js.map +1 -0
- package/dist/cjs/gallery/GalleryScreenPreview.js +78 -4
- package/dist/cjs/gallery/GalleryScreenPreview.js.map +1 -1
- package/dist/cjs/gallery/applicationChrome.js +18 -1
- package/dist/cjs/gallery/applicationChrome.js.map +1 -1
- package/dist/cjs/gallery/composeScreen.js +5 -3
- package/dist/cjs/gallery/composeScreen.js.map +1 -1
- package/dist/cjs/gallery/dialogTemplates.js +41 -36
- package/dist/cjs/gallery/dialogTemplates.js.map +1 -1
- package/dist/cjs/gallery/screens.js +87 -3
- package/dist/cjs/gallery/screens.js.map +1 -1
- package/dist/cjs/index.js +61 -5
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/ComponentName.d.ts +3 -0
- package/dist/esm/ComponentName.d.ts.map +1 -1
- package/dist/esm/ComponentName.js +3 -0
- package/dist/esm/ComponentName.js.map +1 -1
- package/dist/esm/defaultBlueprint.d.ts.map +1 -1
- package/dist/esm/defaultBlueprint.js +20 -1
- package/dist/esm/defaultBlueprint.js.map +1 -1
- package/dist/esm/defaultBlueprintComponentMetadata.js +11 -0
- package/dist/esm/defaultBlueprintComponentMetadata.js.map +1 -1
- package/dist/esm/defaultBlueprintComponents.d.ts.map +1 -1
- package/dist/esm/defaultBlueprintComponents.js +17 -0
- package/dist/esm/defaultBlueprintComponents.js.map +1 -1
- package/dist/esm/foundation/ActionButton.d.ts +1 -1
- package/dist/esm/foundation/ActionButton.d.ts.map +1 -1
- package/dist/esm/foundation/ActionButton.js.map +1 -1
- package/dist/esm/foundation/ActionButtonControl.d.ts +3 -0
- package/dist/esm/foundation/ActionButtonControl.d.ts.map +1 -0
- package/dist/esm/foundation/ActionButtonControl.js +44 -0
- package/dist/esm/foundation/ActionButtonControl.js.map +1 -0
- package/dist/esm/foundation/DialogFrame.d.ts +14 -0
- package/dist/esm/foundation/DialogFrame.d.ts.map +1 -0
- package/dist/esm/foundation/DialogFrame.js +190 -0
- package/dist/esm/foundation/DialogFrame.js.map +1 -0
- package/dist/esm/foundation/FormScreenBody.d.ts.map +1 -1
- package/dist/esm/foundation/FormScreenBody.js +13 -3
- package/dist/esm/foundation/FormScreenBody.js.map +1 -1
- package/dist/esm/foundation/Notice.d.ts +3 -0
- package/dist/esm/foundation/Notice.d.ts.map +1 -0
- package/dist/esm/foundation/Notice.js +49 -0
- package/dist/esm/foundation/Notice.js.map +1 -0
- package/dist/esm/foundation/formModel.d.ts +2 -1
- package/dist/esm/foundation/formModel.d.ts.map +1 -1
- package/dist/esm/foundation/formModel.js +1 -0
- package/dist/esm/foundation/formModel.js.map +1 -1
- package/dist/esm/foundation/foundationComponentMetadata.d.ts.map +1 -1
- package/dist/esm/foundation/foundationComponentMetadata.js +22 -0
- package/dist/esm/foundation/foundationComponentMetadata.js.map +1 -1
- package/dist/esm/foundation/foundationDescriptors.d.ts.map +1 -1
- package/dist/esm/foundation/foundationDescriptors.js +89 -0
- package/dist/esm/foundation/foundationDescriptors.js.map +1 -1
- package/dist/esm/foundation/foundationSamples.d.ts.map +1 -1
- package/dist/esm/foundation/foundationSamples.js +29 -0
- package/dist/esm/foundation/foundationSamples.js.map +1 -1
- package/dist/esm/foundation/foundationStrings.d.ts +2 -0
- package/dist/esm/foundation/foundationStrings.d.ts.map +1 -1
- package/dist/esm/foundation/foundationStrings.js +3 -1
- package/dist/esm/foundation/foundationStrings.js.map +1 -1
- package/dist/esm/foundation/index.d.ts +4 -0
- package/dist/esm/foundation/index.d.ts.map +1 -1
- package/dist/esm/foundation/index.js +4 -0
- package/dist/esm/foundation/index.js.map +1 -1
- package/dist/esm/foundation/templates/boardScreenTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/boardScreenTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/boardScreenTemplate.js +74 -0
- package/dist/esm/foundation/templates/boardScreenTemplate.js.map +1 -0
- package/dist/esm/foundation/templates/dashboardScreenTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/dashboardScreenTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/dashboardScreenTemplate.js +126 -0
- package/dist/esm/foundation/templates/dashboardScreenTemplate.js.map +1 -0
- package/dist/esm/foundation/templates/dialogTemplates.d.ts +20 -0
- package/dist/esm/foundation/templates/dialogTemplates.d.ts.map +1 -0
- package/dist/esm/foundation/templates/dialogTemplates.js +243 -0
- package/dist/esm/foundation/templates/dialogTemplates.js.map +1 -0
- package/dist/esm/foundation/templates/formScreenTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/formScreenTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/formScreenTemplate.js +69 -0
- package/dist/esm/foundation/templates/formScreenTemplate.js.map +1 -0
- package/dist/esm/foundation/templates/index.d.ts +13 -0
- package/dist/esm/foundation/templates/index.d.ts.map +1 -0
- package/dist/esm/foundation/templates/index.js +27 -0
- package/dist/esm/foundation/templates/index.js.map +1 -0
- package/dist/esm/foundation/templates/listScreenTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/listScreenTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/listScreenTemplate.js +122 -0
- package/dist/esm/foundation/templates/listScreenTemplate.js.map +1 -0
- package/dist/esm/foundation/templates/masterDetailScreenTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/masterDetailScreenTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/masterDetailScreenTemplate.js +77 -0
- package/dist/esm/foundation/templates/masterDetailScreenTemplate.js.map +1 -0
- package/dist/esm/foundation/templates/recordPageTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/recordPageTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/recordPageTemplate.js +135 -0
- package/dist/esm/foundation/templates/recordPageTemplate.js.map +1 -0
- package/dist/esm/foundation/templates/stateScreenTemplates.d.ts +8 -0
- package/dist/esm/foundation/templates/stateScreenTemplates.d.ts.map +1 -0
- package/dist/esm/foundation/templates/stateScreenTemplates.js +245 -0
- package/dist/esm/foundation/templates/stateScreenTemplates.js.map +1 -0
- package/dist/esm/foundation/templates/templateParts.d.ts +6 -0
- package/dist/esm/foundation/templates/templateParts.d.ts.map +1 -0
- package/dist/esm/foundation/templates/templateParts.js +33 -0
- package/dist/esm/foundation/templates/templateParts.js.map +1 -0
- package/dist/esm/foundation/templates/wizardScreenTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/wizardScreenTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/wizardScreenTemplate.js +93 -0
- package/dist/esm/foundation/templates/wizardScreenTemplate.js.map +1 -0
- package/dist/esm/foundation/templates/workspaceScreenTemplate.d.ts +3 -0
- package/dist/esm/foundation/templates/workspaceScreenTemplate.d.ts.map +1 -0
- package/dist/esm/foundation/templates/workspaceScreenTemplate.js +60 -0
- package/dist/esm/foundation/templates/workspaceScreenTemplate.js.map +1 -0
- package/dist/esm/gallery/FoundationDialogs.stories.d.ts +35 -0
- package/dist/esm/gallery/FoundationDialogs.stories.d.ts.map +1 -0
- package/dist/esm/gallery/FoundationDialogs.stories.js +38 -0
- package/dist/esm/gallery/FoundationDialogs.stories.js.map +1 -0
- package/dist/esm/gallery/GalleryDialogPreview.d.ts +17 -0
- package/dist/esm/gallery/GalleryDialogPreview.d.ts.map +1 -0
- package/dist/esm/gallery/GalleryDialogPreview.js +59 -0
- package/dist/esm/gallery/GalleryDialogPreview.js.map +1 -0
- package/dist/esm/gallery/GalleryScreenPreview.d.ts +13 -2
- package/dist/esm/gallery/GalleryScreenPreview.d.ts.map +1 -1
- package/dist/esm/gallery/GalleryScreenPreview.js +77 -5
- package/dist/esm/gallery/GalleryScreenPreview.js.map +1 -1
- package/dist/esm/gallery/applicationChrome.d.ts.map +1 -1
- package/dist/esm/gallery/applicationChrome.js +18 -1
- package/dist/esm/gallery/applicationChrome.js.map +1 -1
- package/dist/esm/gallery/composeScreen.d.ts.map +1 -1
- package/dist/esm/gallery/composeScreen.js +5 -3
- package/dist/esm/gallery/composeScreen.js.map +1 -1
- package/dist/esm/gallery/dialogTemplates.d.ts.map +1 -1
- package/dist/esm/gallery/dialogTemplates.js +42 -37
- package/dist/esm/gallery/dialogTemplates.js.map +1 -1
- package/dist/esm/gallery/index.d.ts +1 -0
- package/dist/esm/gallery/index.d.ts.map +1 -1
- package/dist/esm/gallery/index.js +1 -0
- package/dist/esm/gallery/index.js.map +1 -1
- package/dist/esm/gallery/screens.d.ts.map +1 -1
- package/dist/esm/gallery/screens.js +87 -3
- package/dist/esm/gallery/screens.js.map +1 -1
- package/dist/esm/index.js +17 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/foundation/ActionButton.tsx +1 -1
- package/foundation/ActionButtonControl.tsx +37 -0
- package/foundation/DialogFrame.tsx +138 -0
- package/foundation/FormScreenBody.tsx +6 -3
- package/foundation/Notice.tsx +33 -0
- package/foundation/formModel.ts +1 -0
- package/foundation/foundationComponentMetadata.ts +3 -0
- package/foundation/foundationDescriptors.ts +41 -0
- package/foundation/foundationSamples.ts +3 -0
- package/foundation/foundationStrings.ts +2 -0
- package/foundation/index.ts +4 -0
- package/foundation/templates/boardScreenTemplate.ts +28 -0
- package/foundation/templates/dashboardScreenTemplate.ts +37 -0
- package/foundation/templates/dialogTemplates.ts +114 -0
- package/foundation/templates/formScreenTemplate.ts +28 -0
- package/foundation/templates/index.ts +28 -0
- package/foundation/templates/listScreenTemplate.ts +37 -0
- package/foundation/templates/masterDetailScreenTemplate.ts +28 -0
- package/foundation/templates/recordPageTemplate.ts +36 -0
- package/foundation/templates/stateScreenTemplates.ts +107 -0
- package/foundation/templates/templateParts.ts +30 -0
- package/foundation/templates/wizardScreenTemplate.ts +33 -0
- package/foundation/templates/workspaceScreenTemplate.ts +27 -0
- package/gallery/FoundationDialogs.stories.tsx +74 -0
- package/gallery/GalleryDialogPreview.tsx +68 -0
- package/gallery/GalleryScreenPreview.tsx +64 -5
- package/gallery/applicationChrome.ts +6 -1
- package/gallery/composeScreen.ts +4 -2
- package/gallery/dialogTemplates.ts +22 -17
- package/gallery/index.ts +1 -0
- package/gallery/screens.ts +18 -2
- package/package.json +10 -8
- package/sampleData/foundation-en.json +661 -0
- package/shell/layout.css +219 -0
- package/thumbnails/BoardScreen.svg +15 -0
- package/thumbnails/ConfirmDialog.svg +12 -0
- package/thumbnails/DashboardScreen.svg +18 -0
- package/thumbnails/DetailDialog.svg +11 -0
- package/thumbnails/ErrorScreen.svg +11 -0
- package/thumbnails/FilterDialog.svg +16 -0
- package/thumbnails/ForbiddenScreen.svg +10 -0
- package/thumbnails/FormDialog.svg +12 -0
- package/thumbnails/FormScreen.svg +14 -0
- package/thumbnails/ListScreen.svg +16 -0
- package/thumbnails/LoginScreen.svg +12 -0
- package/thumbnails/LookupDialog.svg +13 -0
- package/thumbnails/MasterDetailScreen.svg +22 -0
- package/thumbnails/NotFoundScreen.svg +9 -0
- package/thumbnails/QuickCreateDialog.svg +12 -0
- package/thumbnails/RecordPage.svg +17 -0
- package/thumbnails/SideSheet.svg +13 -0
- package/thumbnails/WizardScreen.svg +16 -0
- package/thumbnails/WorkspaceScreen.svg +12 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { InteractionActionKind, InteractionTriggerKind } from '@cratis/scene.model';
|
|
2
|
+
import { panel } from '../../gallery/elements.js';
|
|
3
|
+
import { defaultBlueprintTemplateProvenance } from '../../templateProvenance.js';
|
|
4
|
+
import { component, fromQuery, foundationTemplateProvenance, thumbnailOf } from './templateParts.js';
|
|
5
|
+
|
|
6
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
7
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
8
|
+
/** What a Cancel or Close control does: close the dialog the screen opened it from, in Scene, in Stage and in the preview alike. */ const closeDialogBehaviors = [
|
|
9
|
+
{
|
|
10
|
+
bindings: [
|
|
11
|
+
{
|
|
12
|
+
trigger: {
|
|
13
|
+
kind: InteractionTriggerKind.Click
|
|
14
|
+
},
|
|
15
|
+
actions: [
|
|
16
|
+
{
|
|
17
|
+
kind: InteractionActionKind.CloseDialog
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
];
|
|
24
|
+
/** An element that closes the dialog when it is clicked. */ const closingDialog = (element)=>({
|
|
25
|
+
...element,
|
|
26
|
+
behaviors: closeDialogBehaviors
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* The provenance, type and category every foundation dialog carries. A dialog built from the foundation and core components needs no component library; one that
|
|
30
|
+
* uses PrimeReact widgets (`needsPrimeReact`) declares the packages it requires.
|
|
31
|
+
*/ const dialogMetadata = (name, needsPrimeReact = false)=>({
|
|
32
|
+
...needsPrimeReact ? defaultBlueprintTemplateProvenance : foundationTemplateProvenance,
|
|
33
|
+
type: 'Dialog',
|
|
34
|
+
category: 'Foundation / Dialog',
|
|
35
|
+
thumbnail: thumbnailOf(name)
|
|
36
|
+
});
|
|
37
|
+
/** One action of the foundation, by the id it is known by. */ const actionButton = (id, properties)=>component(id, 'actionButton', properties);
|
|
38
|
+
/** The footer of a dialog: its buttons, the one that confirms last, so it is the one the eye ends on. */ const dialogActions = (id, buttons)=>panel(`${id}-actions`, buttons);
|
|
39
|
+
/**
|
|
40
|
+
* The quick-create dialog: a short form - six fields at most - opened from a list's header or from a lookup, to make one record without leaving the page.
|
|
41
|
+
* Cancel closes it, Create validates and saves. `FormDialog` is the general form dialog this one is the focused form of: the same shape with the heading,
|
|
42
|
+
* focus handling and the form of the foundation, which is why it is offered as the alias a quick-create button chooses.
|
|
43
|
+
*/ const quickCreateDialogTemplate = {
|
|
44
|
+
name: 'QuickCreateDialog',
|
|
45
|
+
slots: [
|
|
46
|
+
{
|
|
47
|
+
name: 'header'
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'body'
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'actions'
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
content: {
|
|
57
|
+
header: [
|
|
58
|
+
component('quick-create-frame', 'dialogFrame', {
|
|
59
|
+
title: 'New contact',
|
|
60
|
+
subtitle: 'Only what is needed to get started'
|
|
61
|
+
})
|
|
62
|
+
],
|
|
63
|
+
body: [
|
|
64
|
+
closingDialog(component('quick-create-form', 'formScreenBody', {
|
|
65
|
+
mode: 'create',
|
|
66
|
+
saveAndNew: false,
|
|
67
|
+
strings: {
|
|
68
|
+
formSave: 'Create'
|
|
69
|
+
},
|
|
70
|
+
sections: fromQuery('QuickCreateSections'),
|
|
71
|
+
values: fromQuery('QuickCreateValues', '0'),
|
|
72
|
+
errors: fromQuery('FormErrors', '0')
|
|
73
|
+
}))
|
|
74
|
+
],
|
|
75
|
+
actions: []
|
|
76
|
+
},
|
|
77
|
+
displayName: 'Quick create',
|
|
78
|
+
description: 'A short form of six fields at most with Cancel and Create, opened without leaving the page.',
|
|
79
|
+
metadata: dialogMetadata('QuickCreateDialog')
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* The lookup dialog: search, a table or list, and single or multiple selection, with Cancel and Select. Any lookup field opens it, so one dialog serves them all;
|
|
83
|
+
* `selectionMode` on the list is `single` (the default here) or `multiple`.
|
|
84
|
+
*/ const lookupDialogTemplate = {
|
|
85
|
+
name: 'LookupDialog',
|
|
86
|
+
slots: [
|
|
87
|
+
{
|
|
88
|
+
name: 'header'
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'body'
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: 'actions'
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
content: {
|
|
98
|
+
header: [
|
|
99
|
+
component('lookup-frame', 'dialogFrame', {
|
|
100
|
+
title: 'Select an account',
|
|
101
|
+
subtitle: 'Search, then choose one'
|
|
102
|
+
})
|
|
103
|
+
],
|
|
104
|
+
body: [
|
|
105
|
+
component('lookup-search', 'globalSearch', {
|
|
106
|
+
placeholder: 'Search accounts',
|
|
107
|
+
label: 'Search accounts'
|
|
108
|
+
}),
|
|
109
|
+
component('lookup-list', 'dataList', {
|
|
110
|
+
label: 'Accounts',
|
|
111
|
+
rows: fromQuery('LookupRows'),
|
|
112
|
+
columns: fromQuery('LookupColumns'),
|
|
113
|
+
titleField: 'name',
|
|
114
|
+
selectionMode: 'single',
|
|
115
|
+
pageSize: 6
|
|
116
|
+
})
|
|
117
|
+
],
|
|
118
|
+
actions: [
|
|
119
|
+
dialogActions('lookup', [
|
|
120
|
+
closingDialog(actionButton('lookup-cancel', {
|
|
121
|
+
label: 'Cancel',
|
|
122
|
+
emphasis: 'secondary'
|
|
123
|
+
})),
|
|
124
|
+
closingDialog(actionButton('lookup-select', {
|
|
125
|
+
label: 'Select',
|
|
126
|
+
emphasis: 'primary'
|
|
127
|
+
}))
|
|
128
|
+
])
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
displayName: 'Lookup',
|
|
132
|
+
description: 'A search and a list to choose one or several records from, with Cancel and Select.',
|
|
133
|
+
metadata: dialogMetadata('LookupDialog')
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* The side sheet: a drawer from the inline end with a header, a scrollable body and footer actions. It hosts what a page hosts - a form, or a record's
|
|
137
|
+
* tabs and related records - so a record can be edited or read from beside the list it came from.
|
|
138
|
+
*/ const sideSheetTemplate = {
|
|
139
|
+
name: 'SideSheet',
|
|
140
|
+
slots: [
|
|
141
|
+
{
|
|
142
|
+
name: 'header'
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
name: 'body'
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
name: 'actions'
|
|
149
|
+
}
|
|
150
|
+
],
|
|
151
|
+
content: {
|
|
152
|
+
header: [
|
|
153
|
+
component('sheet-frame', 'dialogFrame', {
|
|
154
|
+
title: 'Account details',
|
|
155
|
+
subtitle: 'Edit without leaving the list',
|
|
156
|
+
placement: 'side'
|
|
157
|
+
})
|
|
158
|
+
],
|
|
159
|
+
body: [
|
|
160
|
+
closingDialog(component('sheet-form', 'formScreenBody', {
|
|
161
|
+
mode: 'edit',
|
|
162
|
+
sections: fromQuery('RecordSections'),
|
|
163
|
+
values: fromQuery('RecordValues', '0'),
|
|
164
|
+
errors: fromQuery('FormErrors', '0')
|
|
165
|
+
}))
|
|
166
|
+
],
|
|
167
|
+
actions: [
|
|
168
|
+
dialogActions('sheet', [
|
|
169
|
+
closingDialog(actionButton('sheet-close', {
|
|
170
|
+
label: 'Close',
|
|
171
|
+
emphasis: 'secondary'
|
|
172
|
+
})),
|
|
173
|
+
actionButton('sheet-open', {
|
|
174
|
+
label: 'Open full page',
|
|
175
|
+
emphasis: 'primary',
|
|
176
|
+
targetScreen: 'RecordPage'
|
|
177
|
+
})
|
|
178
|
+
])
|
|
179
|
+
]
|
|
180
|
+
},
|
|
181
|
+
displayName: 'Side sheet',
|
|
182
|
+
description: 'A drawer from the side hosting a record or a form, with footer actions.',
|
|
183
|
+
metadata: dialogMetadata('SideSheet')
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* The filter dialog: the advanced filter builder in a dialog. On a phone it fills the page, which makes it the phone's alternative to the filter panel
|
|
187
|
+
* a list shows beside its table.
|
|
188
|
+
*/ const filterDialogTemplate = {
|
|
189
|
+
name: 'FilterDialog',
|
|
190
|
+
slots: [
|
|
191
|
+
{
|
|
192
|
+
name: 'header'
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
name: 'body'
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
name: 'actions'
|
|
199
|
+
}
|
|
200
|
+
],
|
|
201
|
+
content: {
|
|
202
|
+
header: [
|
|
203
|
+
component('filter-frame', 'dialogFrame', {
|
|
204
|
+
title: 'Filters',
|
|
205
|
+
subtitle: 'Show only the deals that match'
|
|
206
|
+
})
|
|
207
|
+
],
|
|
208
|
+
body: [
|
|
209
|
+
component('filter-builder', 'filterBuilder', {
|
|
210
|
+
fields: fromQuery('DealFilterFields'),
|
|
211
|
+
filter: fromQuery('DealFilter', '0')
|
|
212
|
+
})
|
|
213
|
+
],
|
|
214
|
+
actions: [
|
|
215
|
+
dialogActions('filter', [
|
|
216
|
+
actionButton('filter-reset', {
|
|
217
|
+
label: 'Reset',
|
|
218
|
+
emphasis: 'secondary'
|
|
219
|
+
}),
|
|
220
|
+
closingDialog(actionButton('filter-cancel', {
|
|
221
|
+
label: 'Cancel',
|
|
222
|
+
emphasis: 'secondary'
|
|
223
|
+
})),
|
|
224
|
+
closingDialog(actionButton('filter-apply', {
|
|
225
|
+
label: 'Apply filters',
|
|
226
|
+
emphasis: 'primary'
|
|
227
|
+
}))
|
|
228
|
+
])
|
|
229
|
+
]
|
|
230
|
+
},
|
|
231
|
+
displayName: 'Filters',
|
|
232
|
+
description: 'The advanced filter builder in a dialog, the phone alternative to the filter panel.',
|
|
233
|
+
metadata: dialogMetadata('FilterDialog')
|
|
234
|
+
};
|
|
235
|
+
/** The dialogs the foundation adds to the three the gallery already had. */ const foundationDialogTemplates = [
|
|
236
|
+
quickCreateDialogTemplate,
|
|
237
|
+
lookupDialogTemplate,
|
|
238
|
+
sideSheetTemplate,
|
|
239
|
+
filterDialogTemplate
|
|
240
|
+
];
|
|
241
|
+
|
|
242
|
+
export { actionButton, closeDialogBehaviors, closingDialog, dialogActions, dialogMetadata, filterDialogTemplate, foundationDialogTemplates, lookupDialogTemplate, quickCreateDialogTemplate, sideSheetTemplate };
|
|
243
|
+
//# sourceMappingURL=dialogTemplates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialogTemplates.js","sources":["../../../../foundation/templates/dialogTemplates.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Behavior, DialogTemplate, ExternalComponent, InteractionActionKind, InteractionTriggerKind } from '@cratis/scene.model';\nimport { panel } from '../../gallery/elements';\nimport { defaultBlueprintTemplateProvenance } from '../../templateProvenance';\nimport { component, foundationTemplateProvenance, fromQuery, thumbnailOf } from './templateParts';\n\n/** What a Cancel or Close control does: close the dialog the screen opened it from, in Scene, in Stage and in the preview alike. */\nexport const closeDialogBehaviors: Behavior[] = [{ bindings: [{ trigger: { kind: InteractionTriggerKind.Click }, actions: [{ kind: InteractionActionKind.CloseDialog }] }] }];\n\n/** An element that closes the dialog when it is clicked. */\nexport const closingDialog = <T extends ExternalComponent>(element: T): T => ({ ...element, behaviors: closeDialogBehaviors });\n\n/**\n * The provenance, type and category every foundation dialog carries. A dialog built from the foundation and core components needs no component library; one that\n * uses PrimeReact widgets (`needsPrimeReact`) declares the packages it requires.\n */\nexport const dialogMetadata = (name: string, needsPrimeReact = false) =>\n ({ ...(needsPrimeReact ? defaultBlueprintTemplateProvenance : foundationTemplateProvenance), type: 'Dialog', category: 'Foundation / Dialog', thumbnail: thumbnailOf(name) });\n\n/** One action of the foundation, by the id it is known by. */\nexport const actionButton = (id: string, properties: Record<string, unknown>): ExternalComponent => component(id, 'actionButton', properties);\n\n/** The footer of a dialog: its buttons, the one that confirms last, so it is the one the eye ends on. */\nexport const dialogActions = (id: string, buttons: ExternalComponent[]) => panel(`${id}-actions`, buttons);\n\n/**\n * The quick-create dialog: a short form - six fields at most - opened from a list's header or from a lookup, to make one record without leaving the page.\n * Cancel closes it, Create validates and saves. `FormDialog` is the general form dialog this one is the focused form of: the same shape with the heading,\n * focus handling and the form of the foundation, which is why it is offered as the alias a quick-create button chooses.\n */\nexport const quickCreateDialogTemplate: DialogTemplate = {\n name: 'QuickCreateDialog',\n slots: [{ name: 'header' }, { name: 'body' }, { name: 'actions' }],\n content: {\n header: [component('quick-create-frame', 'dialogFrame', { title: 'New contact', subtitle: 'Only what is needed to get started' })],\n body: [closingDialog(component('quick-create-form', 'formScreenBody', {\n mode: 'create', saveAndNew: false, strings: { formSave: 'Create' },\n sections: fromQuery('QuickCreateSections'), values: fromQuery('QuickCreateValues', '0'), errors: fromQuery('FormErrors', '0'),\n }))],\n actions: [],\n },\n displayName: 'Quick create',\n description: 'A short form of six fields at most with Cancel and Create, opened without leaving the page.',\n metadata: dialogMetadata('QuickCreateDialog'),\n};\n\n/**\n * The lookup dialog: search, a table or list, and single or multiple selection, with Cancel and Select. Any lookup field opens it, so one dialog serves them all;\n * `selectionMode` on the list is `single` (the default here) or `multiple`.\n */\nexport const lookupDialogTemplate: DialogTemplate = {\n name: 'LookupDialog',\n slots: [{ name: 'header' }, { name: 'body' }, { name: 'actions' }],\n content: {\n header: [component('lookup-frame', 'dialogFrame', { title: 'Select an account', subtitle: 'Search, then choose one' })],\n body: [\n component('lookup-search', 'globalSearch', { placeholder: 'Search accounts', label: 'Search accounts' }),\n component('lookup-list', 'dataList', { label: 'Accounts', rows: fromQuery('LookupRows'), columns: fromQuery('LookupColumns'), titleField: 'name', selectionMode: 'single', pageSize: 6 }),\n ],\n actions: [dialogActions('lookup', [\n closingDialog(actionButton('lookup-cancel', { label: 'Cancel', emphasis: 'secondary' })),\n closingDialog(actionButton('lookup-select', { label: 'Select', emphasis: 'primary' })),\n ])],\n },\n displayName: 'Lookup',\n description: 'A search and a list to choose one or several records from, with Cancel and Select.',\n metadata: dialogMetadata('LookupDialog'),\n};\n\n/**\n * The side sheet: a drawer from the inline end with a header, a scrollable body and footer actions. It hosts what a page hosts - a form, or a record's\n * tabs and related records - so a record can be edited or read from beside the list it came from.\n */\nexport const sideSheetTemplate: DialogTemplate = {\n name: 'SideSheet',\n slots: [{ name: 'header' }, { name: 'body' }, { name: 'actions' }],\n content: {\n header: [component('sheet-frame', 'dialogFrame', { title: 'Account details', subtitle: 'Edit without leaving the list', placement: 'side' })],\n body: [closingDialog(component('sheet-form', 'formScreenBody', { mode: 'edit', sections: fromQuery('RecordSections'), values: fromQuery('RecordValues', '0'), errors: fromQuery('FormErrors', '0') }))],\n actions: [dialogActions('sheet', [\n closingDialog(actionButton('sheet-close', { label: 'Close', emphasis: 'secondary' })),\n actionButton('sheet-open', { label: 'Open full page', emphasis: 'primary', targetScreen: 'RecordPage' }),\n ])],\n },\n displayName: 'Side sheet',\n description: 'A drawer from the side hosting a record or a form, with footer actions.',\n metadata: dialogMetadata('SideSheet'),\n};\n\n/**\n * The filter dialog: the advanced filter builder in a dialog. On a phone it fills the page, which makes it the phone's alternative to the filter panel\n * a list shows beside its table.\n */\nexport const filterDialogTemplate: DialogTemplate = {\n name: 'FilterDialog',\n slots: [{ name: 'header' }, { name: 'body' }, { name: 'actions' }],\n content: {\n header: [component('filter-frame', 'dialogFrame', { title: 'Filters', subtitle: 'Show only the deals that match' })],\n body: [component('filter-builder', 'filterBuilder', { fields: fromQuery('DealFilterFields'), filter: fromQuery('DealFilter', '0') })],\n actions: [dialogActions('filter', [\n actionButton('filter-reset', { label: 'Reset', emphasis: 'secondary' }),\n closingDialog(actionButton('filter-cancel', { label: 'Cancel', emphasis: 'secondary' })),\n closingDialog(actionButton('filter-apply', { label: 'Apply filters', emphasis: 'primary' })),\n ])],\n },\n displayName: 'Filters',\n description: 'The advanced filter builder in a dialog, the phone alternative to the filter panel.',\n metadata: dialogMetadata('FilterDialog'),\n};\n\n/** The dialogs the foundation adds to the three the gallery already had. */\nexport const foundationDialogTemplates: DialogTemplate[] = [quickCreateDialogTemplate, lookupDialogTemplate, sideSheetTemplate, filterDialogTemplate];\n"],"names":["closeDialogBehaviors","bindings","trigger","kind","InteractionTriggerKind","Click","actions","InteractionActionKind","CloseDialog","closingDialog","element","behaviors","dialogMetadata","name","needsPrimeReact","defaultBlueprintTemplateProvenance","foundationTemplateProvenance","type","category","thumbnail","thumbnailOf","actionButton","id","properties","component","dialogActions","buttons","panel","quickCreateDialogTemplate","slots","content","header","title","subtitle","body","mode","saveAndNew","strings","formSave","sections","fromQuery","values","errors","displayName","description","metadata","lookupDialogTemplate","placeholder","label","rows","columns","titleField","selectionMode","pageSize","emphasis","sideSheetTemplate","placement","targetScreen","filterDialogTemplate","fields","filter","foundationDialogTemplates"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formScreenTemplate.d.ts","sourceRoot":"","sources":["../../../../foundation/templates/formScreenTemplate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAkB,MAAM,qBAAqB,CAAC;AAQrE,eAAO,MAAM,kBAAkB,EAAE,cAgBhC,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { WidthSizeClass } from '@cratis/scene.model';
|
|
2
|
+
import { column, slotLeaf } from '../../layouts/flowBuilders.js';
|
|
3
|
+
import { component, fromQuery, foundationTemplateProvenance, thumbnailOf } from './templateParts.js';
|
|
4
|
+
|
|
5
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
6
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
7
|
+
/**
|
|
8
|
+
* The form: titled sections of fields in a one-to-three column grid, validated, with Save, Save and new and Cancel. One template serves create, edit, read-only
|
|
9
|
+
* and settings (a save for each section) by its mode, and warns before unsaved changes are lost.
|
|
10
|
+
*/ const formScreenTemplate = {
|
|
11
|
+
name: 'FormScreen',
|
|
12
|
+
fitsSlot: 'content',
|
|
13
|
+
slots: [
|
|
14
|
+
{
|
|
15
|
+
name: 'header'
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
name: 'body'
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'actions'
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
arrangement: {
|
|
25
|
+
root: column([
|
|
26
|
+
slotLeaf('header'),
|
|
27
|
+
slotLeaf('body'),
|
|
28
|
+
slotLeaf('actions')
|
|
29
|
+
], 16),
|
|
30
|
+
overrides: [
|
|
31
|
+
{
|
|
32
|
+
width: WidthSizeClass.Compact,
|
|
33
|
+
root: column([
|
|
34
|
+
slotLeaf('header'),
|
|
35
|
+
slotLeaf('body'),
|
|
36
|
+
slotLeaf('actions')
|
|
37
|
+
], 16)
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
content: {
|
|
42
|
+
header: [
|
|
43
|
+
component('form-header', 'pageHeader', {
|
|
44
|
+
title: 'New account',
|
|
45
|
+
subtitle: 'Fields marked * are required'
|
|
46
|
+
})
|
|
47
|
+
],
|
|
48
|
+
body: [
|
|
49
|
+
component('form-body', 'formScreenBody', {
|
|
50
|
+
mode: 'create',
|
|
51
|
+
sections: fromQuery('RecordSections'),
|
|
52
|
+
values: fromQuery('RecordValues', '0'),
|
|
53
|
+
errors: fromQuery('FormErrors', '0')
|
|
54
|
+
})
|
|
55
|
+
],
|
|
56
|
+
actions: []
|
|
57
|
+
},
|
|
58
|
+
displayName: 'Form',
|
|
59
|
+
description: 'Sections of validated fields with Save, Save and new, Cancel and an unsaved-changes guard.',
|
|
60
|
+
metadata: {
|
|
61
|
+
...foundationTemplateProvenance,
|
|
62
|
+
type: 'Form',
|
|
63
|
+
category: 'Foundation / Form',
|
|
64
|
+
thumbnail: thumbnailOf('FormScreen')
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export { formScreenTemplate };
|
|
69
|
+
//# sourceMappingURL=formScreenTemplate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formScreenTemplate.js","sources":["../../../../foundation/templates/formScreenTemplate.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ScreenTemplate, WidthSizeClass } from '@cratis/scene.model';\nimport { column, grid, row, slotLeaf } from '../../layouts/flowBuilders';\nimport { component, foundationTemplateProvenance, fromQuery, thumbnailOf } from './templateParts';\n\n/**\n * The form: titled sections of fields in a one-to-three column grid, validated, with Save, Save and new and Cancel. One template serves create, edit, read-only\n * and settings (a save for each section) by its mode, and warns before unsaved changes are lost.\n */\nexport const formScreenTemplate: ScreenTemplate = {\n name: 'FormScreen',\n fitsSlot: 'content',\n slots: [{ name: 'header' }, { name: 'body' }, { name: 'actions' }],\n arrangement: {\n root: column([slotLeaf('header'), slotLeaf('body'), slotLeaf('actions')], 16),\n overrides: [{ width: WidthSizeClass.Compact, root: column([slotLeaf('header'), slotLeaf('body'), slotLeaf('actions')], 16) }],\n },\n content: {\n header: [component('form-header', 'pageHeader', { title: 'New account', subtitle: 'Fields marked * are required' })],\n body: [component('form-body', 'formScreenBody', { mode: 'create', sections: fromQuery('RecordSections'), values: fromQuery('RecordValues', '0'), errors: fromQuery('FormErrors', '0') })],\n actions: [],\n },\n displayName: 'Form',\n description: 'Sections of validated fields with Save, Save and new, Cancel and an unsaved-changes guard.',\n metadata: { ...foundationTemplateProvenance, type: 'Form', category: 'Foundation / Form', thumbnail: thumbnailOf('FormScreen') },\n};\n"],"names":["formScreenTemplate","name","fitsSlot","slots","arrangement","root","column","slotLeaf","overrides","width","WidthSizeClass","Compact","content","header","component","title","subtitle","body","mode","sections","fromQuery","values","errors","actions","displayName","description","metadata","foundationTemplateProvenance","type","category","thumbnail","thumbnailOf"],"mappings":";;;;AAAA;AACA;AAMA;;;UAIaA,kBAAAA,GAAqC;IAC9CC,IAAAA,EAAM,YAAA;IACNC,QAAAA,EAAU,SAAA;IACVC,KAAAA,EAAO;AAAC,QAAA;YAAEF,IAAAA,EAAM;AAAS,SAAA;AAAG,QAAA;YAAEA,IAAAA,EAAM;AAAO,SAAA;AAAG,QAAA;YAAEA,IAAAA,EAAM;AAAU;AAAE,KAAA;IAClEG,WAAAA,EAAa;AACTC,QAAAA,IAAAA,EAAMC,MAAAA,CAAO;YAACC,QAAAA,CAAS,QAAA,CAAA;YAAWA,QAAAA,CAAS,MAAA,CAAA;YAASA,QAAAA,CAAS,SAAA;SAAW,EAAE,EAAA,CAAA;QAC1EC,SAAAA,EAAW;AAAC,YAAA;AAAEC,gBAAAA,KAAAA,EAAOC,eAAeC,OAAO;AAAEN,gBAAAA,IAAAA,EAAMC,MAAAA,CAAO;oBAACC,QAAAA,CAAS,QAAA,CAAA;oBAAWA,QAAAA,CAAS,MAAA,CAAA;oBAASA,QAAAA,CAAS,SAAA;iBAAW,EAAE,EAAA;AAAI;AAAE;AACjI,KAAA;IACAK,OAAAA,EAAS;QACLC,MAAAA,EAAQ;AAACC,YAAAA,SAAAA,CAAU,eAAe,YAAA,EAAc;gBAAEC,KAAAA,EAAO,aAAA;gBAAeC,QAAAA,EAAU;AAA+B,aAAA;AAAG,SAAA;QACpHC,IAAAA,EAAM;AAACH,YAAAA,SAAAA,CAAU,aAAa,gBAAA,EAAkB;gBAAEI,IAAAA,EAAM,QAAA;AAAUC,gBAAAA,QAAAA,EAAUC,SAAAA,CAAU,gBAAA,CAAA;AAAmBC,gBAAAA,MAAAA,EAAQD,UAAU,cAAA,EAAgB,GAAA,CAAA;AAAME,gBAAAA,MAAAA,EAAQF,UAAU,YAAA,EAAc,GAAA;AAAK,aAAA;AAAG,SAAA;AACzLG,QAAAA,OAAAA,EAAS;AACb,KAAA;IACAC,WAAAA,EAAa,MAAA;IACbC,WAAAA,EAAa,4FAAA;IACbC,QAAAA,EAAU;AAAE,QAAA,GAAGC,4BAA4B;QAAEC,IAAAA,EAAM,MAAA;QAAQC,QAAAA,EAAU,mBAAA;AAAqBC,QAAAA,SAAAA,EAAWC,WAAAA,CAAY,YAAA;AAAc;AACnI;;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './templateParts';
|
|
2
|
+
export * from './dialogTemplates';
|
|
3
|
+
export * from './stateScreenTemplates';
|
|
4
|
+
export * from './boardScreenTemplate';
|
|
5
|
+
export * from './dashboardScreenTemplate';
|
|
6
|
+
export * from './formScreenTemplate';
|
|
7
|
+
export * from './listScreenTemplate';
|
|
8
|
+
export * from './masterDetailScreenTemplate';
|
|
9
|
+
export * from './recordPageTemplate';
|
|
10
|
+
export * from './wizardScreenTemplate';
|
|
11
|
+
export * from './workspaceScreenTemplate';
|
|
12
|
+
export declare const foundationScreenTemplates: import("@cratis/scene.model/screens").ScreenTemplate[];
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../foundation/templates/index.ts"],"names":[],"mappings":"AAYA,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAG1C,eAAO,MAAM,yBAAyB,wDAErC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { boardScreenTemplate } from './boardScreenTemplate.js';
|
|
2
|
+
import { dashboardScreenTemplate } from './dashboardScreenTemplate.js';
|
|
3
|
+
import { formScreenTemplate } from './formScreenTemplate.js';
|
|
4
|
+
import { listScreenTemplate } from './listScreenTemplate.js';
|
|
5
|
+
import { masterDetailScreenTemplate } from './masterDetailScreenTemplate.js';
|
|
6
|
+
import { recordPageTemplate } from './recordPageTemplate.js';
|
|
7
|
+
import { wizardScreenTemplate } from './wizardScreenTemplate.js';
|
|
8
|
+
import { workspaceScreenTemplate } from './workspaceScreenTemplate.js';
|
|
9
|
+
export { component, foundationTemplateProvenance, fromQuery, thumbnailOf } from './templateParts.js';
|
|
10
|
+
export { actionButton, closeDialogBehaviors, closingDialog, dialogActions, dialogMetadata, filterDialogTemplate, foundationDialogTemplates, lookupDialogTemplate, quickCreateDialogTemplate, sideSheetTemplate } from './dialogTemplates.js';
|
|
11
|
+
export { errorScreenTemplate, forbiddenScreenTemplate, foundationTemplateAliases, loginScreenTemplate, notFoundScreenTemplate, stateScreenTemplates } from './stateScreenTemplates.js';
|
|
12
|
+
|
|
13
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
14
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
15
|
+
/** The foundation screen templates, in the order the manifest lists them. The workspace comes first: it is the container the master/detail nests in. */ const foundationScreenTemplates = [
|
|
16
|
+
workspaceScreenTemplate,
|
|
17
|
+
dashboardScreenTemplate,
|
|
18
|
+
listScreenTemplate,
|
|
19
|
+
boardScreenTemplate,
|
|
20
|
+
masterDetailScreenTemplate,
|
|
21
|
+
recordPageTemplate,
|
|
22
|
+
formScreenTemplate,
|
|
23
|
+
wizardScreenTemplate
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
export { boardScreenTemplate, dashboardScreenTemplate, formScreenTemplate, foundationScreenTemplates, listScreenTemplate, masterDetailScreenTemplate, recordPageTemplate, wizardScreenTemplate, workspaceScreenTemplate };
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../foundation/templates/index.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { boardScreenTemplate } from './boardScreenTemplate';\nimport { dashboardScreenTemplate } from './dashboardScreenTemplate';\nimport { formScreenTemplate } from './formScreenTemplate';\nimport { listScreenTemplate } from './listScreenTemplate';\nimport { masterDetailScreenTemplate } from './masterDetailScreenTemplate';\nimport { recordPageTemplate } from './recordPageTemplate';\nimport { wizardScreenTemplate } from './wizardScreenTemplate';\nimport { workspaceScreenTemplate } from './workspaceScreenTemplate';\n\nexport * from './templateParts';\nexport * from './dialogTemplates';\nexport * from './stateScreenTemplates';\nexport * from './boardScreenTemplate';\nexport * from './dashboardScreenTemplate';\nexport * from './formScreenTemplate';\nexport * from './listScreenTemplate';\nexport * from './masterDetailScreenTemplate';\nexport * from './recordPageTemplate';\nexport * from './wizardScreenTemplate';\nexport * from './workspaceScreenTemplate';\n\n/** The foundation screen templates, in the order the manifest lists them. The workspace comes first: it is the container the master/detail nests in. */\nexport const foundationScreenTemplates = [\n workspaceScreenTemplate, dashboardScreenTemplate, listScreenTemplate, boardScreenTemplate, masterDetailScreenTemplate, recordPageTemplate, formScreenTemplate, wizardScreenTemplate,\n];\n"],"names":["foundationScreenTemplates","workspaceScreenTemplate","dashboardScreenTemplate","listScreenTemplate","boardScreenTemplate","masterDetailScreenTemplate","recordPageTemplate","formScreenTemplate","wizardScreenTemplate"],"mappings":";;;;;;;;;;;;AAAA;AACA;AAuBA,yJACO,MAAMA,yBAAAA,GAA4B;AACrCC,IAAAA,uBAAAA;AAAyBC,IAAAA,uBAAAA;AAAyBC,IAAAA,kBAAAA;AAAoBC,IAAAA,mBAAAA;AAAqBC,IAAAA,0BAAAA;AAA4BC,IAAAA,kBAAAA;AAAoBC,IAAAA,kBAAAA;AAAoBC,IAAAA;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listScreenTemplate.d.ts","sourceRoot":"","sources":["../../../../foundation/templates/listScreenTemplate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAkB,MAAM,qBAAqB,CAAC;AAQrE,eAAO,MAAM,kBAAkB,EAAE,cAyBhC,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { WidthSizeClass } from '@cratis/scene.model';
|
|
2
|
+
import { column, slotLeaf, row } from '../../layouts/flowBuilders.js';
|
|
3
|
+
import { component, fromQuery, foundationTemplateProvenance, thumbnailOf } from './templateParts.js';
|
|
4
|
+
|
|
5
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
6
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
7
|
+
/**
|
|
8
|
+
* The collection screen: search, filters, a list that is a table, grouped, or cards, a bar that appears when rows are selected, and a footer for paging.
|
|
9
|
+
* Search, sort, page and selection live in the address, so a link shares the list as it is. On a phone the table becomes cards.
|
|
10
|
+
*/ const listScreenTemplate = {
|
|
11
|
+
name: 'ListScreen',
|
|
12
|
+
fitsSlot: 'content',
|
|
13
|
+
slots: [
|
|
14
|
+
{
|
|
15
|
+
name: 'header'
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
name: 'toolbar'
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'filters'
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'list'
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: 'bulkBar'
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'footer'
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
arrangement: {
|
|
34
|
+
root: column([
|
|
35
|
+
slotLeaf('header'),
|
|
36
|
+
row([
|
|
37
|
+
slotLeaf('toolbar')
|
|
38
|
+
], 8),
|
|
39
|
+
slotLeaf('filters'),
|
|
40
|
+
slotLeaf('bulkBar'),
|
|
41
|
+
slotLeaf('list'),
|
|
42
|
+
slotLeaf('footer')
|
|
43
|
+
], 12),
|
|
44
|
+
overrides: [
|
|
45
|
+
{
|
|
46
|
+
width: WidthSizeClass.Compact,
|
|
47
|
+
root: column([
|
|
48
|
+
slotLeaf('header'),
|
|
49
|
+
slotLeaf('toolbar'),
|
|
50
|
+
slotLeaf('filters'),
|
|
51
|
+
slotLeaf('bulkBar'),
|
|
52
|
+
slotLeaf('list'),
|
|
53
|
+
slotLeaf('footer')
|
|
54
|
+
], 16)
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
content: {
|
|
59
|
+
header: [
|
|
60
|
+
component('list-header', 'pageHeader', {
|
|
61
|
+
title: 'Deals',
|
|
62
|
+
subtitle: 'Every open and closed deal'
|
|
63
|
+
})
|
|
64
|
+
],
|
|
65
|
+
toolbar: [
|
|
66
|
+
component('list-search', 'globalSearch', {
|
|
67
|
+
placeholder: 'Search deals',
|
|
68
|
+
label: 'Search deals',
|
|
69
|
+
urlKey: 'dealsq'
|
|
70
|
+
}),
|
|
71
|
+
component('list-views', 'savedViewsMenu', {
|
|
72
|
+
views: fromQuery('DealViews'),
|
|
73
|
+
savePermission: 'enabled',
|
|
74
|
+
managePermission: 'enabled'
|
|
75
|
+
}),
|
|
76
|
+
component('list-columns', 'columnChooser', {
|
|
77
|
+
columns: fromQuery('DealColumnChoices')
|
|
78
|
+
})
|
|
79
|
+
],
|
|
80
|
+
filters: [
|
|
81
|
+
component('list-filter', 'filterBuilder', {
|
|
82
|
+
fields: fromQuery('DealFilterFields')
|
|
83
|
+
})
|
|
84
|
+
],
|
|
85
|
+
list: [
|
|
86
|
+
component('list-records', 'dataList', {
|
|
87
|
+
label: 'Deals',
|
|
88
|
+
rows: fromQuery('Deals'),
|
|
89
|
+
columns: fromQuery('DealColumns'),
|
|
90
|
+
titleField: 'name',
|
|
91
|
+
selectionMode: 'multiple',
|
|
92
|
+
pageSize: 10,
|
|
93
|
+
rowActions: [
|
|
94
|
+
'Open',
|
|
95
|
+
'Archive'
|
|
96
|
+
],
|
|
97
|
+
urlKey: 'deals'
|
|
98
|
+
})
|
|
99
|
+
],
|
|
100
|
+
bulkBar: [
|
|
101
|
+
component('list-bulk', 'bulkBar', {
|
|
102
|
+
selection: fromQuery('DealSelection'),
|
|
103
|
+
actions: [
|
|
104
|
+
'Assign',
|
|
105
|
+
'Archive'
|
|
106
|
+
]
|
|
107
|
+
})
|
|
108
|
+
],
|
|
109
|
+
footer: []
|
|
110
|
+
},
|
|
111
|
+
displayName: 'List',
|
|
112
|
+
description: 'A searchable, filterable collection that is a table, grouped or cards, with a bulk bar for selected rows.',
|
|
113
|
+
metadata: {
|
|
114
|
+
...foundationTemplateProvenance,
|
|
115
|
+
type: 'List',
|
|
116
|
+
category: 'Foundation / List',
|
|
117
|
+
thumbnail: thumbnailOf('ListScreen')
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export { listScreenTemplate };
|
|
122
|
+
//# sourceMappingURL=listScreenTemplate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listScreenTemplate.js","sources":["../../../../foundation/templates/listScreenTemplate.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ScreenTemplate, WidthSizeClass } from '@cratis/scene.model';\nimport { column, grid, row, slotLeaf } from '../../layouts/flowBuilders';\nimport { component, foundationTemplateProvenance, fromQuery, thumbnailOf } from './templateParts';\n\n/**\n * The collection screen: search, filters, a list that is a table, grouped, or cards, a bar that appears when rows are selected, and a footer for paging.\n * Search, sort, page and selection live in the address, so a link shares the list as it is. On a phone the table becomes cards.\n */\nexport const listScreenTemplate: ScreenTemplate = {\n name: 'ListScreen',\n fitsSlot: 'content',\n slots: [{ name: 'header' }, { name: 'toolbar' }, { name: 'filters' }, { name: 'list' }, { name: 'bulkBar' }, { name: 'footer' }],\n arrangement: {\n root: column([slotLeaf('header'), row([slotLeaf('toolbar')], 8), slotLeaf('filters'), slotLeaf('bulkBar'), slotLeaf('list'), slotLeaf('footer')], 12),\n overrides: [{ width: WidthSizeClass.Compact, root: column([slotLeaf('header'), slotLeaf('toolbar'), slotLeaf('filters'), slotLeaf('bulkBar'), slotLeaf('list'), slotLeaf('footer')], 16) }],\n },\n content: {\n header: [component('list-header', 'pageHeader', { title: 'Deals', subtitle: 'Every open and closed deal' })],\n toolbar: [\n component('list-search', 'globalSearch', { placeholder: 'Search deals', label: 'Search deals', urlKey: 'dealsq' }),\n component('list-views', 'savedViewsMenu', { views: fromQuery('DealViews'), savePermission: 'enabled', managePermission: 'enabled' }),\n component('list-columns', 'columnChooser', { columns: fromQuery('DealColumnChoices') }),\n ],\n filters: [component('list-filter', 'filterBuilder', { fields: fromQuery('DealFilterFields') })],\n list: [component('list-records', 'dataList', {\n label: 'Deals', rows: fromQuery('Deals'), columns: fromQuery('DealColumns'), titleField: 'name', selectionMode: 'multiple', pageSize: 10, rowActions: ['Open', 'Archive'], urlKey: 'deals',\n })],\n bulkBar: [component('list-bulk', 'bulkBar', { selection: fromQuery('DealSelection'), actions: ['Assign', 'Archive'] })],\n footer: [],\n },\n displayName: 'List',\n description: 'A searchable, filterable collection that is a table, grouped or cards, with a bulk bar for selected rows.',\n metadata: { ...foundationTemplateProvenance, type: 'List', category: 'Foundation / List', thumbnail: thumbnailOf('ListScreen') },\n};\n"],"names":["listScreenTemplate","name","fitsSlot","slots","arrangement","root","column","slotLeaf","row","overrides","width","WidthSizeClass","Compact","content","header","component","title","subtitle","toolbar","placeholder","label","urlKey","views","fromQuery","savePermission","managePermission","columns","filters","fields","list","rows","titleField","selectionMode","pageSize","rowActions","bulkBar","selection","actions","footer","displayName","description","metadata","foundationTemplateProvenance","type","category","thumbnail","thumbnailOf"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"masterDetailScreenTemplate.d.ts","sourceRoot":"","sources":["../../../../foundation/templates/masterDetailScreenTemplate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAkB,MAAM,qBAAqB,CAAC;AAQrE,eAAO,MAAM,0BAA0B,EAAE,cAgBxC,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { WidthSizeClass } from '@cratis/scene.model';
|
|
2
|
+
import { column, slotLeaf, grid } from '../../layouts/flowBuilders.js';
|
|
3
|
+
import { component, fromQuery, foundationTemplateProvenance, thumbnailOf } from './templateParts.js';
|
|
4
|
+
|
|
5
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
6
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
7
|
+
/**
|
|
8
|
+
* The master/detail: a list beside the selected record. The selection lives in the address, so a link opens a record and the back button returns to the
|
|
9
|
+
* list; on a phone the two become a navigation stack - the list, then the record with a way back. It lives in a module workspace's `moduleContent`.
|
|
10
|
+
*/ const masterDetailScreenTemplate = {
|
|
11
|
+
name: 'MasterDetailScreen',
|
|
12
|
+
fitsSlot: 'WorkspaceScreen.moduleContent',
|
|
13
|
+
slots: [
|
|
14
|
+
{
|
|
15
|
+
name: 'list'
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
name: 'details'
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
arrangement: {
|
|
22
|
+
root: grid([
|
|
23
|
+
slotLeaf('list'),
|
|
24
|
+
slotLeaf('details', {
|
|
25
|
+
span: 2
|
|
26
|
+
})
|
|
27
|
+
], 3, 16),
|
|
28
|
+
overrides: [
|
|
29
|
+
{
|
|
30
|
+
width: WidthSizeClass.Compact,
|
|
31
|
+
root: column([
|
|
32
|
+
slotLeaf('list'),
|
|
33
|
+
slotLeaf('details')
|
|
34
|
+
], 16)
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
content: {
|
|
39
|
+
list: [
|
|
40
|
+
component('md-list', 'dataList', {
|
|
41
|
+
label: 'Accounts',
|
|
42
|
+
rows: fromQuery('Deals'),
|
|
43
|
+
columns: fromQuery('DealColumns'),
|
|
44
|
+
titleField: 'name',
|
|
45
|
+
selectionMode: 'single',
|
|
46
|
+
urlKey: 'md'
|
|
47
|
+
})
|
|
48
|
+
],
|
|
49
|
+
details: [
|
|
50
|
+
component('md-detail', 'tabSet', {
|
|
51
|
+
tabs: fromQuery('RecordTabs'),
|
|
52
|
+
urlKey: 'mdtab',
|
|
53
|
+
label: 'Account'
|
|
54
|
+
})
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
displayName: 'Master/detail with address selection',
|
|
58
|
+
description: 'A list beside the selected record that stacks into a navigation stack on a phone.',
|
|
59
|
+
outlets: [
|
|
60
|
+
{
|
|
61
|
+
name: 'master-detail.detail',
|
|
62
|
+
description: 'The selected record.',
|
|
63
|
+
accepts: [
|
|
64
|
+
'Detail'
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
metadata: {
|
|
69
|
+
...foundationTemplateProvenance,
|
|
70
|
+
type: 'Workspace',
|
|
71
|
+
category: 'Foundation / Workspace',
|
|
72
|
+
thumbnail: thumbnailOf('MasterDetailScreen')
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export { masterDetailScreenTemplate };
|
|
77
|
+
//# sourceMappingURL=masterDetailScreenTemplate.js.map
|