@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 @@
|
|
|
1
|
+
{"version":3,"file":"Notice.d.ts","sourceRoot":"","sources":["../../../foundation/Notice.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAa/D,wBAAgB,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,wBAAwB,+BAgB3D"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { readOptionalString } from '../shell/elementProperties.js';
|
|
3
|
+
import { FoundationIcon } from './FoundationIcon.js';
|
|
4
|
+
import { readLocale } from './formatting.js';
|
|
5
|
+
import { readStatusTone, StatusTone, statusToneIcons } from './StatusChip.js';
|
|
6
|
+
|
|
7
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
8
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
9
|
+
/**
|
|
10
|
+
* The `notice` component: one message about the region it sits in - a sign-in error, a warning above a form, a note under a field.
|
|
11
|
+
*
|
|
12
|
+
* It is a live region: a danger or warning notice is an `alert` and any other a `status`, and the region is on the page even while empty, so the
|
|
13
|
+
* message is announced when it arrives rather than only when the page loads. With no `text` nothing is drawn but the empty region, which is what a
|
|
14
|
+
* sign-in screen's error area is until a sign-in fails. `tone` picks the icon and the status colors; the message is always words, never color alone.
|
|
15
|
+
*/ function Notice({ element }) {
|
|
16
|
+
const tone = readStatusTone(element.properties.tone ?? StatusTone.Danger);
|
|
17
|
+
const text = readOptionalString(element, 'text') ?? '';
|
|
18
|
+
const title = readOptionalString(element, 'title');
|
|
19
|
+
const urgent = tone === StatusTone.Danger || tone === StatusTone.Warning;
|
|
20
|
+
return /*#__PURE__*/ jsx("div", {
|
|
21
|
+
className: "foundation foundation-notice",
|
|
22
|
+
"data-scene-id": element.id,
|
|
23
|
+
"data-tone": tone,
|
|
24
|
+
"data-empty": text === '' || undefined,
|
|
25
|
+
role: urgent ? 'alert' : 'status',
|
|
26
|
+
lang: readLocale(element),
|
|
27
|
+
children: text !== '' && /*#__PURE__*/ jsxs(Fragment, {
|
|
28
|
+
children: [
|
|
29
|
+
/*#__PURE__*/ jsx(FoundationIcon, {
|
|
30
|
+
name: statusToneIcons[tone]
|
|
31
|
+
}),
|
|
32
|
+
/*#__PURE__*/ jsxs("p", {
|
|
33
|
+
children: [
|
|
34
|
+
title && /*#__PURE__*/ jsxs("strong", {
|
|
35
|
+
children: [
|
|
36
|
+
title,
|
|
37
|
+
" "
|
|
38
|
+
]
|
|
39
|
+
}),
|
|
40
|
+
text
|
|
41
|
+
]
|
|
42
|
+
})
|
|
43
|
+
]
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export { Notice };
|
|
49
|
+
//# sourceMappingURL=Notice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Notice.js","sources":["../../../foundation/Notice.tsx"],"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 { RegisteredComponentProps } from '@cratis/scene.react';\nimport { readOptionalString } from '../shell/elementProperties';\nimport { FoundationIcon } from './FoundationIcon';\nimport { readLocale } from './formatting';\nimport { StatusTone, readStatusTone, statusToneIcons } from './StatusChip';\n\n/**\n * The `notice` component: one message about the region it sits in - a sign-in error, a warning above a form, a note under a field.\n *\n * It is a live region: a danger or warning notice is an `alert` and any other a `status`, and the region is on the page even while empty, so the\n * message is announced when it arrives rather than only when the page loads. With no `text` nothing is drawn but the empty region, which is what a\n * sign-in screen's error area is until a sign-in fails. `tone` picks the icon and the status colors; the message is always words, never color alone.\n */\nexport function Notice({ element }: RegisteredComponentProps) {\n const tone = readStatusTone(element.properties.tone ?? StatusTone.Danger);\n const text = readOptionalString(element, 'text') ?? '';\n const title = readOptionalString(element, 'title');\n const urgent = tone === StatusTone.Danger || tone === StatusTone.Warning;\n\n return (\n <div className='foundation foundation-notice' data-scene-id={element.id} data-tone={tone} data-empty={text === '' || undefined} role={urgent ? 'alert' : 'status'} lang={readLocale(element)}>\n {text !== '' && (\n <>\n <FoundationIcon name={statusToneIcons[tone]} />\n <p>{title && <strong>{title} </strong>}{text}</p>\n </>\n )}\n </div>\n );\n}\n"],"names":["Notice","element","tone","readStatusTone","properties","StatusTone","Danger","text","readOptionalString","title","urgent","Warning","_jsx","div","className","data-scene-id","id","data-tone","data-empty","undefined","role","lang","readLocale","_jsxs","_Fragment","FoundationIcon","name","statusToneIcons","p","strong"],"mappings":";;;;;;AAAA;AACA;AAQA;;;;;;AAMC,IACM,SAASA,MAAAA,CAAO,EAAEC,OAAO,EAA4B,EAAA;IACxD,MAAMC,IAAAA,GAAOC,eAAeF,OAAAA,CAAQG,UAAU,CAACF,IAAI,IAAIG,WAAWC,MAAM,CAAA;IACxE,MAAMC,IAAAA,GAAOC,kBAAAA,CAAmBP,OAAAA,EAAS,MAAA,CAAA,IAAW,EAAA;IACpD,MAAMQ,KAAAA,GAAQD,mBAAmBP,OAAAA,EAAS,OAAA,CAAA;AAC1C,IAAA,MAAMS,SAASR,IAAAA,KAASG,UAAAA,CAAWC,MAAM,IAAIJ,IAAAA,KAASG,WAAWM,OAAO;AAExE,IAAA,qBACIC,GAAA,CAACC,KAAAA,EAAAA;QAAIC,SAAAA,EAAU,8BAAA;AAA+BC,QAAAA,eAAAA,EAAed,QAAQe,EAAE;QAAEC,WAAAA,EAAWf,IAAAA;AAAMgB,QAAAA,YAAAA,EAAYX,SAAS,EAAA,IAAMY,SAAAA;AAAWC,QAAAA,IAAAA,EAAMV,SAAS,OAAA,GAAU,QAAA;AAAUW,QAAAA,IAAAA,EAAMC,UAAAA,CAAWrB,OAAAA,CAAAA;AAC/KM,QAAAA,QAAAA,EAAAA,IAAAA,KAAS,EAAA,kBACNgB,IAAA,CAAAC,QAAA,EAAA;;8BACIZ,GAAA,CAACa,cAAAA,EAAAA;oBAAeC,IAAAA,EAAMC,eAAe,CAACzB,IAAAA;;8BACtCqB,IAAA,CAACK,GAAAA,EAAAA;;AAAGnB,wBAAAA,KAAAA,kBAASc,IAAA,CAACM,QAAAA,EAAAA;;AAAQpB,gCAAAA,KAAAA;AAAM,gCAAA;;;AAAYF,wBAAAA;;;;;;AAK5D;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formModel.d.ts","sourceRoot":"","sources":["../../../foundation/formModel.ts"],"names":[],"mappings":"AAIA,oBAAY,aAAa;IACrB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,WAAW,gBAAgB;IAC3B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,OAAO,YAAY;
|
|
1
|
+
{"version":3,"file":"formModel.d.ts","sourceRoot":"","sources":["../../../foundation/formModel.ts"],"names":[],"mappings":"AAIA,oBAAY,aAAa;IACrB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,WAAW,gBAAgB;IAC3B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,QAAQ,aAAa;CACxB;AAGD,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;CACvB;AAGD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAGjD,oBAAY,QAAQ;IAChB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,QAAQ,aAAa;CACxB;AAGD,eAAO,MAAM,YAAY,YAAI,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;AAMjF,eAAO,MAAM,YAAY,UAAW,OAAO,KAAG,QAAqH,CAAC;AAGpK,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,EAAE,CAoB9D;AAGD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CASlE;AAGD,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAS9F;AAGD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,CAQ5G;AAGD,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAGvE;AAUD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAchI"}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
FormFieldType["File"] = "file";
|
|
13
13
|
FormFieldType["RichText"] = "richText";
|
|
14
14
|
FormFieldType["Address"] = "address";
|
|
15
|
+
FormFieldType["Password"] = "password";
|
|
15
16
|
return FormFieldType;
|
|
16
17
|
}({});
|
|
17
18
|
/** The ways the one form can be used (Part B 2.8). */ var FormMode = /*#__PURE__*/ function(FormMode) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formModel.js","sources":["../../../foundation/formModel.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\n/** The field types a form offers (Part B 2.8). */\nexport enum FormFieldType {\n Text = 'text',\n Number = 'number',\n Currency = 'currency',\n Date = 'date',\n Select = 'select',\n MultiSelect = 'multiSelect',\n Lookup = 'lookup',\n Toggle = 'toggle',\n File = 'file',\n RichText = 'richText',\n Address = 'address',\n}\n\n/** One field of a form section. */\nexport interface FormField {\n name: string;\n label: string;\n type: FormFieldType;\n required: boolean;\n options: string[];\n /** The columns of the section grid the field spans (1 to 3). */\n span: number;\n placeholder?: string;\n help?: string;\n}\n\n/** A titled group of fields in a grid of one to three columns. */\nexport interface FormSection {\n id: string;\n title: string;\n columns: number;\n fields: FormField[];\n}\n\n/** The values of a form by field name; a multi-select is an array, a toggle a boolean, an address an object of lines. */\nexport type FormValues = Record<string, unknown>;\n\n/** The ways the one form can be used (Part B 2.8). */\nexport enum FormMode {\n Create = 'create',\n Edit = 'edit',\n ReadOnly = 'readOnly',\n Settings = 'settings',\n}\n\n/** The lines of an address, in the order they are asked. */\nexport const addressLines = ['street', 'postalCode', 'city', 'country'] as const;\n\nconst records = (value: unknown): Record<string, unknown>[] =>\n Array.isArray(value) ? value.filter((entry): entry is Record<string, unknown> => typeof entry === 'object' && entry !== null && !Array.isArray(entry)) : [];\n\n/** Reads the mode, defaulting to create. */\nexport const readFormMode = (value: unknown): FormMode => ((Object.values(FormMode) as string[]).includes(value as string) ? (value as FormMode) : FormMode.Create);\n\n/** Reads sections, with their fields, dropping fields without a name and repeated names; a section grid is clamped to one to three columns. */\nexport function readFormSections(value: unknown): FormSection[] {\n const names = new Set<string>();\n return records(value).flatMap((section, index) => {\n const columns = typeof section.columns === 'number' ? Math.min(3, Math.max(1, Math.floor(section.columns))) : 1;\n const fields = records(section.fields).flatMap((entry): FormField[] => {\n if (typeof entry.name !== 'string' || entry.name.length === 0 || names.has(entry.name)) return [];\n names.add(entry.name);\n return [{\n name: entry.name,\n label: typeof entry.label === 'string' && entry.label.length > 0 ? entry.label : entry.name,\n type: (Object.values(FormFieldType) as string[]).includes(entry.type as string) ? (entry.type as FormFieldType) : FormFieldType.Text,\n required: entry.required === true,\n options: Array.isArray(entry.options) ? entry.options.filter((option): option is string => typeof option === 'string') : [],\n span: typeof entry.span === 'number' ? Math.min(columns, Math.max(1, Math.floor(entry.span))) : 1,\n ...(typeof entry.placeholder === 'string' ? { placeholder: entry.placeholder } : {}),\n ...(typeof entry.help === 'string' ? { help: entry.help } : {}),\n }];\n });\n return [{ id: typeof section.id === 'string' && section.id.length > 0 ? section.id : `section-${index}`, title: typeof section.title === 'string' ? section.title : '', columns, fields }];\n });\n}\n\n/** Whether a field holds a value: an empty or blank text, an empty list, a toggle left false (a required toggle must be on) or an address with no street and city are empty. */\nexport function isFilled(field: FormField, value: unknown): boolean {\n switch (field.type) {\n case FormFieldType.Toggle: return value === true;\n case FormFieldType.MultiSelect: return Array.isArray(value) && value.length > 0;\n case FormFieldType.File: return Array.isArray(value) ? value.length > 0 : typeof value === 'string' && value.trim().length > 0;\n case FormFieldType.Address: return typeof value === 'object' && value !== null && ['street', 'city'].every(line => typeof (value as Record<string, unknown>)[line] === 'string' && ((value as Record<string, unknown>)[line] as string).trim().length > 0);\n case FormFieldType.Number: case FormFieldType.Currency: return typeof value === 'number' ? Number.isFinite(value) : typeof value === 'string' && value.trim().length > 0 && Number.isFinite(Number(value));\n default: return typeof value === 'string' ? value.trim().length > 0 : value !== undefined && value !== null && value !== '';\n }\n}\n\n/** Why a field is invalid, as a kind the component words in the locale: `required`, `invalid`, or undefined when it is fine. An empty optional field is fine. */\nexport function problemOf(field: FormField, value: unknown): 'required' | 'invalid' | undefined {\n if (!isFilled(field, value)) {\n const empty = value === undefined || value === null || value === '' || (typeof value === 'string' && value.trim() === '') || (Array.isArray(value) && value.length === 0) || value === false;\n return field.required ? 'required' : empty ? undefined : 'invalid';\n }\n\n if (field.type === FormFieldType.Date && typeof value === 'string' && Number.isNaN(new Date(value).getTime())) return 'invalid';\n if ((field.type === FormFieldType.Select || field.type === FormFieldType.Lookup) && field.options.length > 0 && typeof value === 'string' && !field.options.includes(value)) return 'invalid';\n return undefined;\n}\n\n/** The problems of every field, by field name, for the fields in the given sections. */\nexport function validate(sections: FormSection[], values: FormValues): Record<string, 'required' | 'invalid'> {\n const problems: Record<string, 'required' | 'invalid'> = {};\n for (const field of sections.flatMap(section => section.fields)) {\n const problem = problemOf(field, values[field.name]);\n if (problem) problems[field.name] = problem;\n }\n\n return problems;\n}\n\n/** Whether two sets of values are the same, field by field and in depth, so the unsaved-changes guard compares what the person sees. */\nexport function sameValues(left: FormValues, right: FormValues): boolean {\n const keys = new Set([...Object.keys(left), ...Object.keys(right)]);\n return [...keys].every(key => JSON.stringify(normalizeValue(left[key])) === JSON.stringify(normalizeValue(right[key])));\n}\n\nfunction normalizeValue(value: unknown): unknown {\n if (value === undefined || value === null || value === '' || value === false) return null;\n if (Array.isArray(value)) return value.length === 0 ? null : value;\n if (typeof value === 'object') { const entries = Object.entries(value as Record<string, unknown>).filter(([, line]) => line !== '' && line !== undefined).sort(([a], [b]) => a.localeCompare(b)); return entries.length === 0 ? null : entries; }\n return value;\n}\n\n/** Maps a server's field errors (`{ field: message }` or `[{ field, message }]`) onto the fields of the form; an error for a field the form does not have is returned as a general one so it is never lost. */\nexport function mapServerErrors(sections: FormSection[], errors: unknown): { byField: Record<string, string>; general: string[] } {\n const known = new Set(sections.flatMap(section => section.fields.map(field => field.name)));\n const pairs: [string, string][] = Array.isArray(errors)\n ? records(errors).flatMap(entry => (typeof entry.message === 'string' ? [[typeof entry.field === 'string' ? entry.field : '', entry.message] as [string, string]] : []))\n : typeof errors === 'object' && errors !== null ? Object.entries(errors as Record<string, unknown>).flatMap(([field, message]) => (typeof message === 'string' ? [[field, message] as [string, string]] : [])) : [];\n\n const byField: Record<string, string> = {};\n const general: string[] = [];\n for (const [field, message] of pairs) {\n if (known.has(field) && byField[field] === undefined) byField[field] = message;\n else general.push(field && !known.has(field) ? `${field}: ${message}` : message);\n }\n\n return { byField, general };\n}\n"],"names":["FormFieldType","FormMode","addressLines","records","value","Array","isArray","filter","entry","readFormMode","Object","values","includes","readFormSections","names","Set","flatMap","section","index","columns","Math","min","max","floor","fields","name","length","has","add","label","type","required","options","option","span","placeholder","help","id","title","isFilled","field","trim","every","line","Number","isFinite","undefined","problemOf","empty","isNaN","Date","getTime","validate","sections","problems","problem","sameValues","left","right","keys","key","JSON","stringify","normalizeValue","entries","sort","a","b","localeCompare","mapServerErrors","errors","known","map","pairs","message","byField","general","push"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"formModel.js","sources":["../../../foundation/formModel.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\n/** The field types a form offers (Part B 2.8). */\nexport enum FormFieldType {\n Text = 'text',\n Number = 'number',\n Currency = 'currency',\n Date = 'date',\n Select = 'select',\n MultiSelect = 'multiSelect',\n Lookup = 'lookup',\n Toggle = 'toggle',\n File = 'file',\n RichText = 'richText',\n Address = 'address',\n Password = 'password',\n}\n\n/** One field of a form section. */\nexport interface FormField {\n name: string;\n label: string;\n type: FormFieldType;\n required: boolean;\n options: string[];\n /** The columns of the section grid the field spans (1 to 3). */\n span: number;\n placeholder?: string;\n help?: string;\n}\n\n/** A titled group of fields in a grid of one to three columns. */\nexport interface FormSection {\n id: string;\n title: string;\n columns: number;\n fields: FormField[];\n}\n\n/** The values of a form by field name; a multi-select is an array, a toggle a boolean, an address an object of lines. */\nexport type FormValues = Record<string, unknown>;\n\n/** The ways the one form can be used (Part B 2.8). */\nexport enum FormMode {\n Create = 'create',\n Edit = 'edit',\n ReadOnly = 'readOnly',\n Settings = 'settings',\n}\n\n/** The lines of an address, in the order they are asked. */\nexport const addressLines = ['street', 'postalCode', 'city', 'country'] as const;\n\nconst records = (value: unknown): Record<string, unknown>[] =>\n Array.isArray(value) ? value.filter((entry): entry is Record<string, unknown> => typeof entry === 'object' && entry !== null && !Array.isArray(entry)) : [];\n\n/** Reads the mode, defaulting to create. */\nexport const readFormMode = (value: unknown): FormMode => ((Object.values(FormMode) as string[]).includes(value as string) ? (value as FormMode) : FormMode.Create);\n\n/** Reads sections, with their fields, dropping fields without a name and repeated names; a section grid is clamped to one to three columns. */\nexport function readFormSections(value: unknown): FormSection[] {\n const names = new Set<string>();\n return records(value).flatMap((section, index) => {\n const columns = typeof section.columns === 'number' ? Math.min(3, Math.max(1, Math.floor(section.columns))) : 1;\n const fields = records(section.fields).flatMap((entry): FormField[] => {\n if (typeof entry.name !== 'string' || entry.name.length === 0 || names.has(entry.name)) return [];\n names.add(entry.name);\n return [{\n name: entry.name,\n label: typeof entry.label === 'string' && entry.label.length > 0 ? entry.label : entry.name,\n type: (Object.values(FormFieldType) as string[]).includes(entry.type as string) ? (entry.type as FormFieldType) : FormFieldType.Text,\n required: entry.required === true,\n options: Array.isArray(entry.options) ? entry.options.filter((option): option is string => typeof option === 'string') : [],\n span: typeof entry.span === 'number' ? Math.min(columns, Math.max(1, Math.floor(entry.span))) : 1,\n ...(typeof entry.placeholder === 'string' ? { placeholder: entry.placeholder } : {}),\n ...(typeof entry.help === 'string' ? { help: entry.help } : {}),\n }];\n });\n return [{ id: typeof section.id === 'string' && section.id.length > 0 ? section.id : `section-${index}`, title: typeof section.title === 'string' ? section.title : '', columns, fields }];\n });\n}\n\n/** Whether a field holds a value: an empty or blank text, an empty list, a toggle left false (a required toggle must be on) or an address with no street and city are empty. */\nexport function isFilled(field: FormField, value: unknown): boolean {\n switch (field.type) {\n case FormFieldType.Toggle: return value === true;\n case FormFieldType.MultiSelect: return Array.isArray(value) && value.length > 0;\n case FormFieldType.File: return Array.isArray(value) ? value.length > 0 : typeof value === 'string' && value.trim().length > 0;\n case FormFieldType.Address: return typeof value === 'object' && value !== null && ['street', 'city'].every(line => typeof (value as Record<string, unknown>)[line] === 'string' && ((value as Record<string, unknown>)[line] as string).trim().length > 0);\n case FormFieldType.Number: case FormFieldType.Currency: return typeof value === 'number' ? Number.isFinite(value) : typeof value === 'string' && value.trim().length > 0 && Number.isFinite(Number(value));\n default: return typeof value === 'string' ? value.trim().length > 0 : value !== undefined && value !== null && value !== '';\n }\n}\n\n/** Why a field is invalid, as a kind the component words in the locale: `required`, `invalid`, or undefined when it is fine. An empty optional field is fine. */\nexport function problemOf(field: FormField, value: unknown): 'required' | 'invalid' | undefined {\n if (!isFilled(field, value)) {\n const empty = value === undefined || value === null || value === '' || (typeof value === 'string' && value.trim() === '') || (Array.isArray(value) && value.length === 0) || value === false;\n return field.required ? 'required' : empty ? undefined : 'invalid';\n }\n\n if (field.type === FormFieldType.Date && typeof value === 'string' && Number.isNaN(new Date(value).getTime())) return 'invalid';\n if ((field.type === FormFieldType.Select || field.type === FormFieldType.Lookup) && field.options.length > 0 && typeof value === 'string' && !field.options.includes(value)) return 'invalid';\n return undefined;\n}\n\n/** The problems of every field, by field name, for the fields in the given sections. */\nexport function validate(sections: FormSection[], values: FormValues): Record<string, 'required' | 'invalid'> {\n const problems: Record<string, 'required' | 'invalid'> = {};\n for (const field of sections.flatMap(section => section.fields)) {\n const problem = problemOf(field, values[field.name]);\n if (problem) problems[field.name] = problem;\n }\n\n return problems;\n}\n\n/** Whether two sets of values are the same, field by field and in depth, so the unsaved-changes guard compares what the person sees. */\nexport function sameValues(left: FormValues, right: FormValues): boolean {\n const keys = new Set([...Object.keys(left), ...Object.keys(right)]);\n return [...keys].every(key => JSON.stringify(normalizeValue(left[key])) === JSON.stringify(normalizeValue(right[key])));\n}\n\nfunction normalizeValue(value: unknown): unknown {\n if (value === undefined || value === null || value === '' || value === false) return null;\n if (Array.isArray(value)) return value.length === 0 ? null : value;\n if (typeof value === 'object') { const entries = Object.entries(value as Record<string, unknown>).filter(([, line]) => line !== '' && line !== undefined).sort(([a], [b]) => a.localeCompare(b)); return entries.length === 0 ? null : entries; }\n return value;\n}\n\n/** Maps a server's field errors (`{ field: message }` or `[{ field, message }]`) onto the fields of the form; an error for a field the form does not have is returned as a general one so it is never lost. */\nexport function mapServerErrors(sections: FormSection[], errors: unknown): { byField: Record<string, string>; general: string[] } {\n const known = new Set(sections.flatMap(section => section.fields.map(field => field.name)));\n const pairs: [string, string][] = Array.isArray(errors)\n ? records(errors).flatMap(entry => (typeof entry.message === 'string' ? [[typeof entry.field === 'string' ? entry.field : '', entry.message] as [string, string]] : []))\n : typeof errors === 'object' && errors !== null ? Object.entries(errors as Record<string, unknown>).flatMap(([field, message]) => (typeof message === 'string' ? [[field, message] as [string, string]] : [])) : [];\n\n const byField: Record<string, string> = {};\n const general: string[] = [];\n for (const [field, message] of pairs) {\n if (known.has(field) && byField[field] === undefined) byField[field] = message;\n else general.push(field && !known.has(field) ? `${field}: ${message}` : message);\n }\n\n return { byField, general };\n}\n"],"names":["FormFieldType","FormMode","addressLines","records","value","Array","isArray","filter","entry","readFormMode","Object","values","includes","readFormSections","names","Set","flatMap","section","index","columns","Math","min","max","floor","fields","name","length","has","add","label","type","required","options","option","span","placeholder","help","id","title","isFilled","field","trim","every","line","Number","isFinite","undefined","problemOf","empty","isNaN","Date","getTime","validate","sections","problems","problem","sameValues","left","right","keys","key","JSON","stringify","normalizeValue","entries","sort","a","b","localeCompare","mapServerErrors","errors","known","map","pairs","message","byField","general","push"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foundationComponentMetadata.d.ts","sourceRoot":"","sources":["../../../foundation/foundationComponentMetadata.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAA0B,MAAM,qBAAqB,CAAC;AAOhF,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"foundationComponentMetadata.d.ts","sourceRoot":"","sources":["../../../foundation/foundationComponentMetadata.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAA0B,MAAM,qBAAqB,CAAC;AAOhF,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CA4BzE,CAAC"}
|
|
@@ -127,6 +127,28 @@ import { ComponentName } from '../ComponentName.js';
|
|
|
127
127
|
'rail',
|
|
128
128
|
'tabs'
|
|
129
129
|
]),
|
|
130
|
+
[ComponentName.DialogFrame]: componentMetadata('Dialog frame', ComponentCategory.Feedback, 'panel-top', [
|
|
131
|
+
'dialog',
|
|
132
|
+
'modal',
|
|
133
|
+
'sheet',
|
|
134
|
+
'drawer',
|
|
135
|
+
'confirm',
|
|
136
|
+
'header'
|
|
137
|
+
]),
|
|
138
|
+
[ComponentName.ActionButton]: componentMetadata('Action button', ComponentCategory.Actions, 'mouse-pointer-click', [
|
|
139
|
+
'button',
|
|
140
|
+
'action',
|
|
141
|
+
'submit',
|
|
142
|
+
'cancel',
|
|
143
|
+
'confirm'
|
|
144
|
+
]),
|
|
145
|
+
[ComponentName.Notice]: componentMetadata('Notice', ComponentCategory.Feedback, 'circle-alert', [
|
|
146
|
+
'message',
|
|
147
|
+
'error',
|
|
148
|
+
'alert',
|
|
149
|
+
'banner',
|
|
150
|
+
'warning'
|
|
151
|
+
]),
|
|
130
152
|
[ComponentName.BulkBar]: componentMetadata('Bulk bar', ComponentCategory.Actions, 'check-check', [
|
|
131
153
|
'selection',
|
|
132
154
|
'bulk',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foundationComponentMetadata.js","sources":["../../../foundation/foundationComponentMetadata.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 { ComponentCategory } from '@cratis/scene.model';\nimport { ComponentMetadata, componentMetadata as m } from '@cratis/scene.react';\nimport { ComponentName } from '../ComponentName';\n\n/**\n * The category, icon, keywords and picker badge of every foundation component (CMP1), keyed by bare component name.\n * The names are those of `ComponentName`; the metadata of the rest of the package lives in `defaultBlueprintComponentMetadata`.\n */\nexport const foundationComponentMetadata: Record<string, ComponentMetadata> = {\n [ComponentName.EmptyState]: m('Empty state', ComponentCategory.Feedback, 'inbox', ['no data', 'nothing', 'blank slate', 'zero state']),\n [ComponentName.StatCard]: m('Stat card', ComponentCategory.DataDisplay, 'gauge', ['kpi', 'metric', 'figure', 'number', 'dashboard']),\n [ComponentName.TrendChip]: m('Trend chip', ComponentCategory.DataDisplay, 'trending-up', ['delta', 'change', 'arrow', 'comparison']),\n [ComponentName.StatusChip]: m('Status chip', ComponentCategory.DataDisplay, 'badge-check', ['badge', 'state', 'tag', 'label']),\n [ComponentName.ChartWrapper]: m('Chart', ComponentCategory.DataDisplay, 'chart-line', ['graph', 'line', 'bar', 'stacked', 'donut', 'pie', 'funnel', 'plot']),\n [ComponentName.FilterBuilder]: m('Filter builder', ComponentCategory.Input, 'list-filter', ['filter', 'query', 'conditions', 'and or', 'search']),\n [ComponentName.ColumnChooser]: m('Column chooser', ComponentCategory.Actions, 'columns-3', ['columns', 'fields', 'show hide', 'table']),\n [ComponentName.SavedViewsMenu]: m('Saved views menu', ComponentCategory.Actions, 'bookmark', ['views', 'presets', 'saved filters']),\n [ComponentName.ChecklistSection]: m('Checklist', ComponentCategory.DataDisplay, 'list-checks', ['tasks', 'todo', 'onboarding', 'progress', 'steps']),\n [ComponentName.ActivityFeed]: m('Activity feed', ComponentCategory.DataDisplay, 'activity', ['timeline', 'history', 'comments', 'audit', 'log']),\n [ComponentName.AvatarStack]: m('Avatar stack', ComponentCategory.DataDisplay, 'users', ['people', 'members', 'assignees', 'team']),\n [ComponentName.FileUploader]: m('File uploader', ComponentCategory.Input, 'upload', ['attachments', 'files', 'drop zone', 'documents']),\n [ComponentName.ApprovalChainStepper]: m('Approval chain', ComponentCategory.Navigation, 'workflow', ['approvals', 'steps', 'workflow', 'sign off', 'stepper']),\n [ComponentName.OrgTree]: m('Org tree', ComponentCategory.DataDisplay, 'network', ['organization', 'hierarchy', 'org chart', 'reports to', 'tree']),\n [ComponentName.PermissionMatrix]: m('Permission matrix', ComponentCategory.Input, 'shield-check', ['roles', 'permissions', 'access', 'grants', 'rbac']),\n [ComponentName.DataList]: m('Data list', ComponentCategory.DataDisplay, 'table', ['table', 'grid', 'records', 'cards', 'collection', 'list']),\n [ComponentName.TabSet]: m('Tab set', ComponentCategory.Navigation, 'panel-top', ['tabs', 'sections', 'panels']),\n [ComponentName.SubNavigation]: m('Sub-navigation', ComponentCategory.Navigation, 'panel-left', ['module', 'sections', 'rail', 'tabs']),\n [ComponentName.BulkBar]: m('Bulk bar', ComponentCategory.Actions, 'check-check', ['selection', 'bulk', 'batch', 'actions']),\n [ComponentName.GlobalSearch]: m('Search', ComponentCategory.Input, 'search', ['search', 'find', 'query']),\n [ComponentName.NotificationsButton]: m('Notifications button', ComponentCategory.Actions, 'bell', ['bell', 'alerts', 'unread']),\n [ComponentName.KanbanBoard]: m('Kanban board', ComponentCategory.DataDisplay, 'kanban', ['board', 'kanban', 'columns', 'pipeline', 'cards']),\n [ComponentName.WizardProgress]: m('Wizard', ComponentCategory.Navigation, 'footprints', ['wizard', 'steps', 'stepper', 'multi-step']),\n [ComponentName.FormScreenBody]: m('Form', ComponentCategory.Forms, 'text-cursor-input', ['form', 'fields', 'sections', 'validation']),\n};\n"],"names":["foundationComponentMetadata","ComponentName","EmptyState","m","ComponentCategory","Feedback","StatCard","DataDisplay","TrendChip","StatusChip","ChartWrapper","FilterBuilder","Input","ColumnChooser","Actions","SavedViewsMenu","ChecklistSection","ActivityFeed","AvatarStack","FileUploader","ApprovalChainStepper","Navigation","OrgTree","PermissionMatrix","DataList","TabSet","SubNavigation","BulkBar","GlobalSearch","NotificationsButton","KanbanBoard","WizardProgress","FormScreenBody","Forms"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"foundationComponentMetadata.js","sources":["../../../foundation/foundationComponentMetadata.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 { ComponentCategory } from '@cratis/scene.model';\nimport { ComponentMetadata, componentMetadata as m } from '@cratis/scene.react';\nimport { ComponentName } from '../ComponentName';\n\n/**\n * The category, icon, keywords and picker badge of every foundation component (CMP1), keyed by bare component name.\n * The names are those of `ComponentName`; the metadata of the rest of the package lives in `defaultBlueprintComponentMetadata`.\n */\nexport const foundationComponentMetadata: Record<string, ComponentMetadata> = {\n [ComponentName.EmptyState]: m('Empty state', ComponentCategory.Feedback, 'inbox', ['no data', 'nothing', 'blank slate', 'zero state']),\n [ComponentName.StatCard]: m('Stat card', ComponentCategory.DataDisplay, 'gauge', ['kpi', 'metric', 'figure', 'number', 'dashboard']),\n [ComponentName.TrendChip]: m('Trend chip', ComponentCategory.DataDisplay, 'trending-up', ['delta', 'change', 'arrow', 'comparison']),\n [ComponentName.StatusChip]: m('Status chip', ComponentCategory.DataDisplay, 'badge-check', ['badge', 'state', 'tag', 'label']),\n [ComponentName.ChartWrapper]: m('Chart', ComponentCategory.DataDisplay, 'chart-line', ['graph', 'line', 'bar', 'stacked', 'donut', 'pie', 'funnel', 'plot']),\n [ComponentName.FilterBuilder]: m('Filter builder', ComponentCategory.Input, 'list-filter', ['filter', 'query', 'conditions', 'and or', 'search']),\n [ComponentName.ColumnChooser]: m('Column chooser', ComponentCategory.Actions, 'columns-3', ['columns', 'fields', 'show hide', 'table']),\n [ComponentName.SavedViewsMenu]: m('Saved views menu', ComponentCategory.Actions, 'bookmark', ['views', 'presets', 'saved filters']),\n [ComponentName.ChecklistSection]: m('Checklist', ComponentCategory.DataDisplay, 'list-checks', ['tasks', 'todo', 'onboarding', 'progress', 'steps']),\n [ComponentName.ActivityFeed]: m('Activity feed', ComponentCategory.DataDisplay, 'activity', ['timeline', 'history', 'comments', 'audit', 'log']),\n [ComponentName.AvatarStack]: m('Avatar stack', ComponentCategory.DataDisplay, 'users', ['people', 'members', 'assignees', 'team']),\n [ComponentName.FileUploader]: m('File uploader', ComponentCategory.Input, 'upload', ['attachments', 'files', 'drop zone', 'documents']),\n [ComponentName.ApprovalChainStepper]: m('Approval chain', ComponentCategory.Navigation, 'workflow', ['approvals', 'steps', 'workflow', 'sign off', 'stepper']),\n [ComponentName.OrgTree]: m('Org tree', ComponentCategory.DataDisplay, 'network', ['organization', 'hierarchy', 'org chart', 'reports to', 'tree']),\n [ComponentName.PermissionMatrix]: m('Permission matrix', ComponentCategory.Input, 'shield-check', ['roles', 'permissions', 'access', 'grants', 'rbac']),\n [ComponentName.DataList]: m('Data list', ComponentCategory.DataDisplay, 'table', ['table', 'grid', 'records', 'cards', 'collection', 'list']),\n [ComponentName.TabSet]: m('Tab set', ComponentCategory.Navigation, 'panel-top', ['tabs', 'sections', 'panels']),\n [ComponentName.SubNavigation]: m('Sub-navigation', ComponentCategory.Navigation, 'panel-left', ['module', 'sections', 'rail', 'tabs']),\n [ComponentName.DialogFrame]: m('Dialog frame', ComponentCategory.Feedback, 'panel-top', ['dialog', 'modal', 'sheet', 'drawer', 'confirm', 'header']),\n [ComponentName.ActionButton]: m('Action button', ComponentCategory.Actions, 'mouse-pointer-click', ['button', 'action', 'submit', 'cancel', 'confirm']),\n [ComponentName.Notice]: m('Notice', ComponentCategory.Feedback, 'circle-alert', ['message', 'error', 'alert', 'banner', 'warning']),\n [ComponentName.BulkBar]: m('Bulk bar', ComponentCategory.Actions, 'check-check', ['selection', 'bulk', 'batch', 'actions']),\n [ComponentName.GlobalSearch]: m('Search', ComponentCategory.Input, 'search', ['search', 'find', 'query']),\n [ComponentName.NotificationsButton]: m('Notifications button', ComponentCategory.Actions, 'bell', ['bell', 'alerts', 'unread']),\n [ComponentName.KanbanBoard]: m('Kanban board', ComponentCategory.DataDisplay, 'kanban', ['board', 'kanban', 'columns', 'pipeline', 'cards']),\n [ComponentName.WizardProgress]: m('Wizard', ComponentCategory.Navigation, 'footprints', ['wizard', 'steps', 'stepper', 'multi-step']),\n [ComponentName.FormScreenBody]: m('Form', ComponentCategory.Forms, 'text-cursor-input', ['form', 'fields', 'sections', 'validation']),\n};\n"],"names":["foundationComponentMetadata","ComponentName","EmptyState","m","ComponentCategory","Feedback","StatCard","DataDisplay","TrendChip","StatusChip","ChartWrapper","FilterBuilder","Input","ColumnChooser","Actions","SavedViewsMenu","ChecklistSection","ActivityFeed","AvatarStack","FileUploader","ApprovalChainStepper","Navigation","OrgTree","PermissionMatrix","DataList","TabSet","SubNavigation","DialogFrame","ActionButton","Notice","BulkBar","GlobalSearch","NotificationsButton","KanbanBoard","WizardProgress","FormScreenBody","Forms"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foundationDescriptors.d.ts","sourceRoot":"","sources":["../../../foundation/foundationDescriptors.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB,EAAyC,MAAM,qBAAqB,CAAC;AAgBxI,eAAO,MAAM,QAAQ,qBAAsG,CAAC;AAiB5H,eAAO,MAAM,IAAI,SAAU,MAAM,SAAS,MAAM,SAAS,MAAM,aAAa,MAAM,cAAc,kBAAkB,EAAE,gBAAgB,MAAM,KAAG,kBACoC,CAAC;AAMlL,eAAO,MAAM,uBAAuB,EAAE,kBAAkB,EAkBvD,CAAC;AAOF,eAAO,MAAM,qBAAqB,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"foundationDescriptors.d.ts","sourceRoot":"","sources":["../../../foundation/foundationDescriptors.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB,EAAyC,MAAM,qBAAqB,CAAC;AAgBxI,eAAO,MAAM,QAAQ,qBAAsG,CAAC;AAiB5H,eAAO,MAAM,IAAI,SAAU,MAAM,SAAS,MAAM,SAAS,MAAM,aAAa,MAAM,cAAc,kBAAkB,EAAE,gBAAgB,MAAM,KAAG,kBACoC,CAAC;AAMlL,eAAO,MAAM,uBAAuB,EAAE,kBAAkB,EAkBvD,CAAC;AAOF,eAAO,MAAM,qBAAqB,EAAE,mBAAmB,EA2gBtD,CAAC"}
|
|
@@ -790,6 +790,92 @@ const formats = {
|
|
|
790
790
|
...standardStateProperties.filter((property)=>property.path !== 'label')
|
|
791
791
|
]
|
|
792
792
|
},
|
|
793
|
+
{
|
|
794
|
+
component: key(ComponentName.DialogFrame),
|
|
795
|
+
displayName: 'Dialog frame',
|
|
796
|
+
description: 'The head of a dialog: its title, a message and the consequences it states, and a close button. It makes the dialog it opens in keep focus inside, restore it, close on Escape and be drawn centered, as a side sheet or full height.',
|
|
797
|
+
properties: [
|
|
798
|
+
text('title', 'Title', 'Content', undefined, {
|
|
799
|
+
constraints: {
|
|
800
|
+
required: true
|
|
801
|
+
}
|
|
802
|
+
}),
|
|
803
|
+
text('subtitle', 'Subtitle', 'Content'),
|
|
804
|
+
text('message', 'Message', 'Content', 'What the dialog asks or says.'),
|
|
805
|
+
{
|
|
806
|
+
path: 'consequences',
|
|
807
|
+
label: 'Consequences',
|
|
808
|
+
group: 'Content',
|
|
809
|
+
valueType: PropertyValueType.Json,
|
|
810
|
+
editorKind: PropertyEditorKind.StringList,
|
|
811
|
+
default: [],
|
|
812
|
+
description: 'What will happen if the person goes ahead, one line each.'
|
|
813
|
+
},
|
|
814
|
+
choice('placement', 'Placement', 'Appearance', {
|
|
815
|
+
center: 'Centered',
|
|
816
|
+
side: 'Side sheet',
|
|
817
|
+
full: 'Full height'
|
|
818
|
+
}, 'center', 'Where the dialog is drawn; on a phone every dialog fills the page.'),
|
|
819
|
+
choice('tone', 'Tone', 'Appearance', {
|
|
820
|
+
default: 'Default',
|
|
821
|
+
danger: 'Destructive'
|
|
822
|
+
}, 'default', 'A destructive dialog is drawn in the danger colors.'),
|
|
823
|
+
text('locale', 'Locale', 'Content'),
|
|
824
|
+
{
|
|
825
|
+
path: 'strings',
|
|
826
|
+
label: 'Text overrides',
|
|
827
|
+
group: 'Content',
|
|
828
|
+
valueType: PropertyValueType.Object,
|
|
829
|
+
editorKind: PropertyEditorKind.StringMap
|
|
830
|
+
}
|
|
831
|
+
]
|
|
832
|
+
},
|
|
833
|
+
{
|
|
834
|
+
component: key(ComponentName.ActionButton),
|
|
835
|
+
displayName: 'Action button',
|
|
836
|
+
description: 'One action, drawn as every action of the foundation is, that is enabled, disabled with its reason, or hidden by the permission of the user.',
|
|
837
|
+
properties: [
|
|
838
|
+
text('label', 'Label', 'Content', 'What it does - a verb, never "OK".', {
|
|
839
|
+
constraints: {
|
|
840
|
+
required: true
|
|
841
|
+
}
|
|
842
|
+
}),
|
|
843
|
+
choice('emphasis', 'Emphasis', 'Appearance', {
|
|
844
|
+
primary: 'Primary',
|
|
845
|
+
secondary: 'Secondary',
|
|
846
|
+
quiet: 'Quiet',
|
|
847
|
+
danger: 'Destructive'
|
|
848
|
+
}, 'primary'),
|
|
849
|
+
rule('permission', 'Permission', 'Whether the action works, refuses with a reason or is not shown.'),
|
|
850
|
+
text('disabledReason', 'Reason when disabled', 'Permissions'),
|
|
851
|
+
text('targetScreen', 'Go to screen', 'Behavior', 'The screen it goes to when no behavior is attached.'),
|
|
852
|
+
text('locale', 'Locale', 'Content'),
|
|
853
|
+
{
|
|
854
|
+
path: 'strings',
|
|
855
|
+
label: 'Text overrides',
|
|
856
|
+
group: 'Content',
|
|
857
|
+
valueType: PropertyValueType.Object,
|
|
858
|
+
editorKind: PropertyEditorKind.StringMap
|
|
859
|
+
}
|
|
860
|
+
]
|
|
861
|
+
},
|
|
862
|
+
{
|
|
863
|
+
component: key(ComponentName.Notice),
|
|
864
|
+
displayName: 'Notice',
|
|
865
|
+
description: 'One message about the region it sits in, announced when it arrives. Empty until it has something to say.',
|
|
866
|
+
properties: [
|
|
867
|
+
text('text', 'Message', 'Data', 'Bind to the error or note to show; empty draws nothing.'),
|
|
868
|
+
text('title', 'Title', 'Content'),
|
|
869
|
+
choice('tone', 'Tone', 'Appearance', {
|
|
870
|
+
danger: 'Error',
|
|
871
|
+
warning: 'Warning',
|
|
872
|
+
info: 'Information',
|
|
873
|
+
success: 'Success',
|
|
874
|
+
neutral: 'Neutral'
|
|
875
|
+
}, 'danger'),
|
|
876
|
+
text('locale', 'Locale', 'Content')
|
|
877
|
+
]
|
|
878
|
+
},
|
|
793
879
|
{
|
|
794
880
|
component: key(ComponentName.BulkBar),
|
|
795
881
|
displayName: 'Bulk bar',
|
|
@@ -945,6 +1031,9 @@ const formats = {
|
|
|
945
1031
|
displayName: 'Form',
|
|
946
1032
|
description: 'Titled sections of fields in a one-to-three column grid, with inline validation, a save bar, the unsaved-changes guard and four modes.',
|
|
947
1033
|
properties: [
|
|
1034
|
+
flag('saveAndNew', 'Offer Save and new', 'Behavior', 'Whether a create form offers Save and new next to Save; a dialog that creates one record leaves it out.', {
|
|
1035
|
+
default: true
|
|
1036
|
+
}),
|
|
948
1037
|
{
|
|
949
1038
|
...list('sections', 'Sections', 'Data', 'Section', [
|
|
950
1039
|
text('id', 'Id', 'Data'),
|