@cratis/scene.blueprint.default 4.32.0 → 4.34.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 +12 -0
- package/defaultBlueprintComponents.ts +5 -1
- package/dist/cjs/ComponentName.js +4 -0
- package/dist/cjs/ComponentName.js.map +1 -1
- package/dist/cjs/defaultBlueprint.js +1 -1
- package/dist/cjs/defaultBlueprintComponentMetadata.js +2 -2
- package/dist/cjs/defaultBlueprintComponents.js +10 -2
- package/dist/cjs/defaultBlueprintComponents.js.map +1 -1
- package/dist/cjs/foundation/ChartWrapper.js +520 -0
- package/dist/cjs/foundation/ChartWrapper.js.map +1 -0
- package/dist/cjs/foundation/ColumnChooser.js +156 -0
- package/dist/cjs/foundation/ColumnChooser.js.map +1 -0
- package/dist/cjs/foundation/FilterBuilder.js +307 -0
- package/dist/cjs/foundation/FilterBuilder.js.map +1 -0
- package/dist/cjs/foundation/SavedViewsMenu.js +199 -0
- package/dist/cjs/foundation/SavedViewsMenu.js.map +1 -0
- package/dist/cjs/foundation/chartGeometry.js +101 -0
- package/dist/cjs/foundation/chartGeometry.js.map +1 -0
- package/dist/cjs/foundation/columnModel.js +43 -0
- package/dist/cjs/foundation/columnModel.js.map +1 -0
- package/dist/cjs/foundation/filterModel.js +123 -0
- package/dist/cjs/foundation/filterModel.js.map +1 -0
- package/dist/cjs/foundation/foundationComponentMetadata.js +28 -0
- package/dist/cjs/foundation/foundationComponentMetadata.js.map +1 -1
- package/dist/cjs/foundation/foundationDescriptors.js +153 -0
- package/dist/cjs/foundation/foundationDescriptors.js.map +1 -1
- package/dist/cjs/foundation/foundationSamples.js +130 -0
- package/dist/cjs/foundation/foundationSamples.js.map +1 -1
- package/dist/cjs/foundation/foundationStrings.js +25 -0
- package/dist/cjs/foundation/foundationStrings.js.map +1 -1
- package/dist/cjs/foundation/useElementWidth.js +31 -0
- package/dist/cjs/foundation/useElementWidth.js.map +1 -0
- package/dist/cjs/foundation/viewModel.js +24 -0
- package/dist/cjs/foundation/viewModel.js.map +1 -0
- package/dist/cjs/index.js +91 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/preview-host/ApplicationDocument.js +17 -0
- package/dist/cjs/preview-host/ApplicationDocument.js.map +1 -0
- package/dist/cjs/preview-host/ApplicationHost.js +113 -0
- package/dist/cjs/preview-host/ApplicationHost.js.map +1 -0
- package/dist/cjs/preview-host/FlowArrangementView.js +75 -0
- package/dist/cjs/preview-host/FlowArrangementView.js.map +1 -0
- package/dist/cjs/preview-host/PreviewProblem.js +32 -0
- package/dist/cjs/preview-host/PreviewProblem.js.map +1 -0
- package/dist/cjs/preview-host/PreviewProblemsView.js +51 -0
- package/dist/cjs/preview-host/PreviewProblemsView.js.map +1 -0
- package/dist/cjs/preview-host/PreviewSliceFragment.js +55 -0
- package/dist/cjs/preview-host/PreviewSliceFragment.js.map +1 -0
- package/dist/cjs/preview-host/PreviewTarget.js +17 -0
- package/dist/cjs/preview-host/PreviewTarget.js.map +1 -0
- package/dist/cjs/preview-host/PreviewTemplate.js +49 -0
- package/dist/cjs/preview-host/PreviewTemplate.js.map +1 -0
- package/dist/cjs/preview-host/PreviewToast.js +45 -0
- package/dist/cjs/preview-host/PreviewToast.js.map +1 -0
- package/dist/cjs/preview-host/ScenePreviewHost.js +290 -0
- package/dist/cjs/preview-host/ScenePreviewHost.js.map +1 -0
- package/dist/cjs/preview-host/composeApplication.js +249 -0
- package/dist/cjs/preview-host/composeApplication.js.map +1 -0
- package/dist/cjs/preview-host/defaultApplicationChrome.js +43 -0
- package/dist/cjs/preview-host/defaultApplicationChrome.js.map +1 -0
- package/dist/cjs/preview-host/diagnosePreview.js +100 -0
- package/dist/cjs/preview-host/diagnosePreview.js.map +1 -0
- package/dist/cjs/preview-host/previewProfile.js +53 -0
- package/dist/cjs/preview-host/previewProfile.js.map +1 -0
- package/dist/cjs/preview-host/previewSampleData.js +116 -0
- package/dist/cjs/preview-host/previewSampleData.js.map +1 -0
- package/dist/cjs/preview-host/resolvePreviewPlan.js +126 -0
- package/dist/cjs/preview-host/resolvePreviewPlan.js.map +1 -0
- package/dist/cjs/preview-host/useSizeClass.js +23 -0
- package/dist/cjs/preview-host/useSizeClass.js.map +1 -0
- package/dist/esm/ComponentName.d.ts +5 -1
- package/dist/esm/ComponentName.d.ts.map +1 -1
- package/dist/esm/ComponentName.js +4 -0
- package/dist/esm/ComponentName.js.map +1 -1
- package/dist/esm/defaultBlueprint.js +1 -1
- package/dist/esm/defaultBlueprintComponentMetadata.js +2 -2
- package/dist/esm/defaultBlueprintComponents.d.ts.map +1 -1
- package/dist/esm/defaultBlueprintComponents.js +10 -2
- package/dist/esm/defaultBlueprintComponents.js.map +1 -1
- package/dist/esm/foundation/ChartWrapper.d.ts +5 -0
- package/dist/esm/foundation/ChartWrapper.d.ts.map +1 -0
- package/dist/esm/foundation/ChartWrapper.js +517 -0
- package/dist/esm/foundation/ChartWrapper.js.map +1 -0
- package/dist/esm/foundation/ColumnChooser.d.ts +3 -0
- package/dist/esm/foundation/ColumnChooser.d.ts.map +1 -0
- package/dist/esm/foundation/ColumnChooser.js +154 -0
- package/dist/esm/foundation/ColumnChooser.js.map +1 -0
- package/dist/esm/foundation/FilterBuilder.d.ts +3 -0
- package/dist/esm/foundation/FilterBuilder.d.ts.map +1 -0
- package/dist/esm/foundation/FilterBuilder.js +305 -0
- package/dist/esm/foundation/FilterBuilder.js.map +1 -0
- package/dist/esm/foundation/Foundation.stories.d.ts +16 -0
- package/dist/esm/foundation/Foundation.stories.d.ts.map +1 -1
- package/dist/esm/foundation/Foundation.stories.js +16 -0
- package/dist/esm/foundation/Foundation.stories.js.map +1 -1
- package/dist/esm/foundation/SavedViewsMenu.d.ts +4 -0
- package/dist/esm/foundation/SavedViewsMenu.d.ts.map +1 -0
- package/dist/esm/foundation/SavedViewsMenu.js +196 -0
- package/dist/esm/foundation/SavedViewsMenu.js.map +1 -0
- package/dist/esm/foundation/chartGeometry.d.ts +34 -0
- package/dist/esm/foundation/chartGeometry.d.ts.map +1 -0
- package/dist/esm/foundation/chartGeometry.js +93 -0
- package/dist/esm/foundation/chartGeometry.js.map +1 -0
- package/dist/esm/foundation/columnModel.d.ts +11 -0
- package/dist/esm/foundation/columnModel.d.ts.map +1 -0
- package/dist/esm/foundation/columnModel.js +38 -0
- package/dist/esm/foundation/columnModel.js.map +1 -0
- package/dist/esm/foundation/filterModel.d.ts +33 -0
- package/dist/esm/foundation/filterModel.d.ts.map +1 -0
- package/dist/esm/foundation/filterModel.js +112 -0
- package/dist/esm/foundation/filterModel.js.map +1 -0
- package/dist/esm/foundation/foundationComponentMetadata.d.ts.map +1 -1
- package/dist/esm/foundation/foundationComponentMetadata.js +28 -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 +154 -1
- 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 +130 -0
- package/dist/esm/foundation/foundationSamples.js.map +1 -1
- package/dist/esm/foundation/foundationStrings.d.ts +25 -0
- package/dist/esm/foundation/foundationStrings.d.ts.map +1 -1
- package/dist/esm/foundation/foundationStrings.js +25 -0
- package/dist/esm/foundation/foundationStrings.js.map +1 -1
- package/dist/esm/foundation/index.d.ts +9 -0
- package/dist/esm/foundation/index.d.ts.map +1 -1
- package/dist/esm/foundation/index.js +9 -0
- package/dist/esm/foundation/index.js.map +1 -1
- package/dist/esm/foundation/useElementWidth.d.ts +3 -0
- package/dist/esm/foundation/useElementWidth.d.ts.map +1 -0
- package/dist/esm/foundation/useElementWidth.js +29 -0
- package/dist/esm/foundation/useElementWidth.js.map +1 -0
- package/dist/esm/foundation/viewModel.d.ts +7 -0
- package/dist/esm/foundation/viewModel.d.ts.map +1 -0
- package/dist/esm/foundation/viewModel.js +22 -0
- package/dist/esm/foundation/viewModel.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +26 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/preview-host/ApplicationDocument.d.ts +7 -0
- package/dist/esm/preview-host/ApplicationDocument.d.ts.map +1 -0
- package/dist/esm/preview-host/ApplicationDocument.js +15 -0
- package/dist/esm/preview-host/ApplicationDocument.js.map +1 -0
- package/dist/esm/preview-host/ApplicationHost.d.ts +21 -0
- package/dist/esm/preview-host/ApplicationHost.d.ts.map +1 -0
- package/dist/esm/preview-host/ApplicationHost.js +111 -0
- package/dist/esm/preview-host/ApplicationHost.js.map +1 -0
- package/dist/esm/preview-host/FlowArrangementView.d.ts +7 -0
- package/dist/esm/preview-host/FlowArrangementView.d.ts.map +1 -0
- package/dist/esm/preview-host/FlowArrangementView.js +73 -0
- package/dist/esm/preview-host/FlowArrangementView.js.map +1 -0
- package/dist/esm/preview-host/PreviewProblem.d.ts +26 -0
- package/dist/esm/preview-host/PreviewProblem.d.ts.map +1 -0
- package/dist/esm/preview-host/PreviewProblem.js +28 -0
- package/dist/esm/preview-host/PreviewProblem.js.map +1 -0
- package/dist/esm/preview-host/PreviewProblemsView.d.ts +7 -0
- package/dist/esm/preview-host/PreviewProblemsView.d.ts.map +1 -0
- package/dist/esm/preview-host/PreviewProblemsView.js +49 -0
- package/dist/esm/preview-host/PreviewProblemsView.js.map +1 -0
- package/dist/esm/preview-host/PreviewSliceFragment.d.ts +3 -0
- package/dist/esm/preview-host/PreviewSliceFragment.d.ts.map +1 -0
- package/dist/esm/preview-host/PreviewSliceFragment.js +53 -0
- package/dist/esm/preview-host/PreviewSliceFragment.js.map +1 -0
- package/dist/esm/preview-host/PreviewTarget.d.ts +10 -0
- package/dist/esm/preview-host/PreviewTarget.d.ts.map +1 -0
- package/dist/esm/preview-host/PreviewTarget.js +15 -0
- package/dist/esm/preview-host/PreviewTarget.js.map +1 -0
- package/dist/esm/preview-host/PreviewTemplate.d.ts +5 -0
- package/dist/esm/preview-host/PreviewTemplate.d.ts.map +1 -0
- package/dist/esm/preview-host/PreviewTemplate.js +45 -0
- package/dist/esm/preview-host/PreviewTemplate.js.map +1 -0
- package/dist/esm/preview-host/PreviewToast.d.ts +10 -0
- package/dist/esm/preview-host/PreviewToast.d.ts.map +1 -0
- package/dist/esm/preview-host/PreviewToast.js +43 -0
- package/dist/esm/preview-host/PreviewToast.js.map +1 -0
- package/dist/esm/preview-host/ScenePreviewHost.d.ts +32 -0
- package/dist/esm/preview-host/ScenePreviewHost.d.ts.map +1 -0
- package/dist/esm/preview-host/ScenePreviewHost.js +288 -0
- package/dist/esm/preview-host/ScenePreviewHost.js.map +1 -0
- package/dist/esm/preview-host/composeApplication.d.ts +34 -0
- package/dist/esm/preview-host/composeApplication.d.ts.map +1 -0
- package/dist/esm/preview-host/composeApplication.js +239 -0
- package/dist/esm/preview-host/composeApplication.js.map +1 -0
- package/dist/esm/preview-host/defaultApplicationChrome.d.ts +4 -0
- package/dist/esm/preview-host/defaultApplicationChrome.d.ts.map +1 -0
- package/dist/esm/preview-host/defaultApplicationChrome.js +41 -0
- package/dist/esm/preview-host/defaultApplicationChrome.js.map +1 -0
- package/dist/esm/preview-host/diagnosePreview.d.ts +22 -0
- package/dist/esm/preview-host/diagnosePreview.d.ts.map +1 -0
- package/dist/esm/preview-host/diagnosePreview.js +98 -0
- package/dist/esm/preview-host/diagnosePreview.js.map +1 -0
- package/dist/esm/preview-host/index.d.ts +18 -0
- package/dist/esm/preview-host/index.d.ts.map +1 -0
- package/dist/esm/preview-host/index.js +18 -0
- package/dist/esm/preview-host/index.js.map +1 -0
- package/dist/esm/preview-host/previewProfile.d.ts +6 -0
- package/dist/esm/preview-host/previewProfile.d.ts.map +1 -0
- package/dist/esm/preview-host/previewProfile.js +49 -0
- package/dist/esm/preview-host/previewProfile.js.map +1 -0
- package/dist/esm/preview-host/previewSampleData.d.ts +22 -0
- package/dist/esm/preview-host/previewSampleData.d.ts.map +1 -0
- package/dist/esm/preview-host/previewSampleData.js +113 -0
- package/dist/esm/preview-host/previewSampleData.js.map +1 -0
- package/dist/esm/preview-host/resolvePreviewPlan.d.ts +18 -0
- package/dist/esm/preview-host/resolvePreviewPlan.d.ts.map +1 -0
- package/dist/esm/preview-host/resolvePreviewPlan.js +124 -0
- package/dist/esm/preview-host/resolvePreviewPlan.js.map +1 -0
- package/dist/esm/preview-host/useSizeClass.d.ts +3 -0
- package/dist/esm/preview-host/useSizeClass.d.ts.map +1 -0
- package/dist/esm/preview-host/useSizeClass.js +21 -0
- package/dist/esm/preview-host/useSizeClass.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/foundation/ChartWrapper.tsx +252 -0
- package/foundation/ColumnChooser.tsx +73 -0
- package/foundation/FilterBuilder.tsx +144 -0
- package/foundation/Foundation.stories.tsx +16 -0
- package/foundation/SavedViewsMenu.tsx +94 -0
- package/foundation/chartGeometry.ts +108 -0
- package/foundation/columnModel.ts +39 -0
- package/foundation/filterModel.ts +111 -0
- package/foundation/foundationComponentMetadata.ts +4 -0
- package/foundation/foundationDescriptors.ts +86 -1
- package/foundation/foundationSamples.ts +19 -0
- package/foundation/foundationStrings.ts +25 -0
- package/foundation/index.ts +9 -0
- package/foundation/useElementWidth.ts +31 -0
- package/foundation/viewModel.ts +21 -0
- package/index.ts +1 -0
- package/package.json +8 -8
- package/preview-host/ApplicationDocument.ts +31 -0
- package/preview-host/ApplicationHost.tsx +114 -0
- package/preview-host/FlowArrangementView.tsx +59 -0
- package/preview-host/PreviewProblem.ts +68 -0
- package/preview-host/PreviewProblemsView.tsx +31 -0
- package/preview-host/PreviewSliceFragment.ts +43 -0
- package/preview-host/PreviewTarget.ts +19 -0
- package/preview-host/PreviewTemplate.tsx +45 -0
- package/preview-host/PreviewToast.tsx +32 -0
- package/preview-host/ScenePreviewHost.tsx +250 -0
- package/preview-host/composeApplication.ts +273 -0
- package/preview-host/defaultApplicationChrome.ts +33 -0
- package/preview-host/diagnosePreview.ts +132 -0
- package/preview-host/index.ts +20 -0
- package/preview-host/previewProfile.ts +47 -0
- package/preview-host/previewSampleData.ts +144 -0
- package/preview-host/resolvePreviewPlan.ts +100 -0
- package/preview-host/useSizeClass.ts +23 -0
- package/shell/layout.css +307 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foundationStrings.js","sources":["../../../foundation/foundationStrings.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 { ExternalComponent } from '@cratis/scene.model';\n\n/**\n * Every piece of text the foundation components say themselves, as opposed to text a screen author or a bound query\n * supplies. Nothing is hard-coded in a component (spec Part B 1.5): a component reads its text from here, merged with\n * the `strings` property of the element, so an application localizes by supplying a table - and a bound string\n * (a `{name}` placeholder is replaced by the values the component passes) arrives the same way any other property does.\n */\nexport const foundationStrings = {\n loading: 'Loading',\n emptyHeadline: 'Nothing here yet',\n emptyHint: 'There is nothing to show for now.',\n errorHeadline: 'This could not be loaded',\n errorHint: 'Something went wrong while loading. Try again in a moment.',\n retry: 'Try again',\n noPermissionHeadline: 'You do not have access',\n noPermissionHint: 'Ask an administrator to grant you access to {subject}.',\n noPermissionSubject: 'this content',\n partialHeadline: 'Some parts could not be loaded',\n partialHint: 'The unavailable parts are: {regions}.',\n disabledNoPermission: 'You do not have permission to do this',\n trendUp: 'up {value}',\n trendDown: 'down {value}',\n trendFlat: 'unchanged',\n trendComparison: 'compared to {period}',\n statusSuccess: 'Success',\n statusWarning: 'Warning',\n statusDanger: 'Problem',\n statusInfo: 'Information',\n statusNeutral: 'Status',\n chartNoData: 'No data to chart',\n chartDataTable: 'Chart data',\n chartSeries: 'Series',\n chartCategory: 'Category',\n filterAdd: 'Add condition',\n filterAddGroup: 'Add group',\n filterRemove: 'Remove condition',\n filterRemoveGroup: 'Remove group',\n filterMatchAll: 'Match all (AND)',\n filterMatchAny: 'Match any (OR)',\n filterField: 'Field',\n filterOperator: 'Operator',\n filterValue: 'Value',\n filterClear: 'Clear filters',\n filterSummary: '{count} active filters',\n columnsChoose: 'Columns',\n columnsLocked: 'always shown',\n columnsReset: 'Show all columns',\n viewsLabel: 'Saved views',\n viewsDefault: 'All items',\n viewsSave: 'Save current view',\n viewsManage: 'Manage views',\n checklistProgress: '{done} of {total} complete',\n checklistOwner: 'Owner',\n checklistDue: 'Due',\n activityEmpty: 'No activity yet',\n avatarOverflow: '{count} more',\n avatarPeople: '{count} people',\n uploadDrop: 'Drop files here or',\n uploadBrowse: 'Browse files',\n uploadRemove: 'Remove {name}',\n uploadTooLarge: '{name} is larger than {limit}',\n uploadWrongType: '{name} is not an accepted file type',\n uploadUploading: 'Uploading',\n uploadDone: 'Uploaded',\n uploadFailed: 'Upload failed',\n approvalPending: 'Pending',\n approvalCurrent: 'Awaiting decision',\n approvalApproved: 'Approved',\n approvalRejected: 'Rejected',\n approvalSkipped: 'Skipped',\n approvalChain: 'Approval chain',\n orgExpand: 'Expand {name}',\n orgCollapse: 'Collapse {name}',\n orgReports: '{count} reports',\n matrixAllowed: 'Allowed',\n matrixDenied: 'Not allowed',\n matrixGrant: 'Grant {permission} to {role}',\n matrixReadOnly: 'Read-only',\n} as const;\n\n/** The name of one of the foundation strings. */\nexport type FoundationStringName = keyof typeof foundationStrings;\n\n/** The text table a foundation component works with. */\nexport type FoundationStrings = Record<FoundationStringName, string>;\n\n/**\n * The foundation strings with the element's own `strings` property laid over them.\n *\n * Only string values of known names are taken, so a typo in an application's table falls back to the default text\n * rather than rendering nothing.\n */\nexport function readFoundationStrings(element: ExternalComponent): FoundationStrings {\n const supplied = element.properties.strings;\n const result: FoundationStrings = { ...foundationStrings };\n if (typeof supplied !== 'object' || supplied === null || Array.isArray(supplied)) return result;\n\n for (const [name, value] of Object.entries(supplied as Record<string, unknown>)) {\n if (name in foundationStrings && typeof value === 'string') result[name as FoundationStringName] = value;\n }\n\n return result;\n}\n\n/** Replaces each `{name}` in a string with the value of the same name, leaving an unknown placeholder visible rather than blank. */\nexport function formatText(text: string, values: Record<string, string | number> = {}): string {\n return text.replace(/\\{(\\w+)\\}/g, (placeholder, name: string) => (name in values ? String(values[name]) : placeholder));\n}\n"],"names":["foundationStrings","loading","emptyHeadline","emptyHint","errorHeadline","errorHint","retry","noPermissionHeadline","noPermissionHint","noPermissionSubject","partialHeadline","partialHint","disabledNoPermission","trendUp","trendDown","trendFlat","trendComparison","statusSuccess","statusWarning","statusDanger","statusInfo","statusNeutral","chartNoData","chartDataTable","chartSeries","chartCategory","filterAdd","filterAddGroup","filterRemove","filterRemoveGroup","filterMatchAll","filterMatchAny","filterField","filterOperator","filterValue","filterClear","filterSummary","columnsChoose","columnsLocked","columnsReset","viewsLabel","viewsDefault","viewsSave","viewsManage","checklistProgress","checklistOwner","checklistDue","activityEmpty","avatarOverflow","avatarPeople","uploadDrop","uploadBrowse","uploadRemove","uploadTooLarge","uploadWrongType","uploadUploading","uploadDone","uploadFailed","approvalPending","approvalCurrent","approvalApproved","approvalRejected","approvalSkipped","approvalChain","orgExpand","orgCollapse","orgReports","matrixAllowed","matrixDenied","matrixGrant","matrixReadOnly","readFoundationStrings","element","supplied","properties","strings","result","Array","isArray","name","value","Object","entries","formatText","text","values","replace","placeholder","String"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"foundationStrings.js","sources":["../../../foundation/foundationStrings.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 { ExternalComponent } from '@cratis/scene.model';\n\n/**\n * Every piece of text the foundation components say themselves, as opposed to text a screen author or a bound query\n * supplies. Nothing is hard-coded in a component (spec Part B 1.5): a component reads its text from here, merged with\n * the `strings` property of the element, so an application localizes by supplying a table - and a bound string\n * (a `{name}` placeholder is replaced by the values the component passes) arrives the same way any other property does.\n */\nexport const foundationStrings = {\n loading: 'Loading',\n emptyHeadline: 'Nothing here yet',\n emptyHint: 'There is nothing to show for now.',\n errorHeadline: 'This could not be loaded',\n errorHint: 'Something went wrong while loading. Try again in a moment.',\n retry: 'Try again',\n noPermissionHeadline: 'You do not have access',\n noPermissionHint: 'Ask an administrator to grant you access to {subject}.',\n noPermissionSubject: 'this content',\n partialHeadline: 'Some parts could not be loaded',\n partialHint: 'The unavailable parts are: {regions}.',\n disabledNoPermission: 'You do not have permission to do this',\n trendUp: 'up {value}',\n trendDown: 'down {value}',\n trendFlat: 'unchanged',\n trendComparison: 'compared to {period}',\n statusSuccess: 'Success',\n statusWarning: 'Warning',\n statusDanger: 'Problem',\n statusInfo: 'Information',\n statusNeutral: 'Status',\n chartNoData: 'No data to chart',\n chartDataTable: 'Chart data',\n chartSeries: 'Series',\n chartCategory: 'Category',\n filterAdd: 'Add condition',\n filterAddGroup: 'Add group',\n filterRemove: 'Remove condition',\n filterRemoveGroup: 'Remove group',\n filterMatchAll: 'Match all (AND)',\n filterMatchAny: 'Match any (OR)',\n filterField: 'Field',\n filterOperator: 'Operator',\n filterValue: 'Value',\n filterClear: 'Clear filters',\n filterCondition: 'Condition {n}',\n filterGroup: 'Group {n}',\n filterNoFields: 'There are no fields to filter on',\n opContains: 'contains',\n opEquals: 'equals',\n opNotEquals: 'does not equal',\n opStartsWith: 'starts with',\n opIsEmpty: 'is empty',\n opGreater: 'is greater than',\n opGreaterOrEqual: 'is at least',\n opLess: 'is less than',\n opLessOrEqual: 'is at most',\n opBefore: 'is before',\n opAfter: 'is after',\n opOn: 'is on',\n opIs: 'is',\n opIsNot: 'is not',\n opTrue: 'is yes',\n opFalse: 'is no',\n filterSummary: '{count} active filters',\n filterSummaryOne: '1 active filter',\n columnsChoose: 'Columns',\n columnsLocked: 'always shown',\n columnsReset: 'Show all columns',\n columnsMoveUp: 'Move {name} up',\n columnsMoveDown: 'Move {name} down',\n columnsShown: '{shown} of {total} shown',\n columnsNone: 'There are no columns to choose from',\n viewsLabel: 'Saved views',\n viewsDefault: 'All items',\n viewsSave: 'Save current view',\n viewsManage: 'Manage views',\n viewsNone: 'There are no saved views',\n checklistProgress: '{done} of {total} complete',\n checklistOwner: 'Owner',\n checklistDue: 'Due',\n activityEmpty: 'No activity yet',\n avatarOverflow: '{count} more',\n avatarPeople: '{count} people',\n uploadDrop: 'Drop files here or',\n uploadBrowse: 'Browse files',\n uploadRemove: 'Remove {name}',\n uploadTooLarge: '{name} is larger than {limit}',\n uploadWrongType: '{name} is not an accepted file type',\n uploadUploading: 'Uploading',\n uploadDone: 'Uploaded',\n uploadFailed: 'Upload failed',\n approvalPending: 'Pending',\n approvalCurrent: 'Awaiting decision',\n approvalApproved: 'Approved',\n approvalRejected: 'Rejected',\n approvalSkipped: 'Skipped',\n approvalChain: 'Approval chain',\n orgExpand: 'Expand {name}',\n orgCollapse: 'Collapse {name}',\n orgReports: '{count} reports',\n matrixAllowed: 'Allowed',\n matrixDenied: 'Not allowed',\n matrixGrant: 'Grant {permission} to {role}',\n matrixReadOnly: 'Read-only',\n} as const;\n\n/** The name of one of the foundation strings. */\nexport type FoundationStringName = keyof typeof foundationStrings;\n\n/** The text table a foundation component works with. */\nexport type FoundationStrings = Record<FoundationStringName, string>;\n\n/**\n * The foundation strings with the element's own `strings` property laid over them.\n *\n * Only string values of known names are taken, so a typo in an application's table falls back to the default text\n * rather than rendering nothing.\n */\nexport function readFoundationStrings(element: ExternalComponent): FoundationStrings {\n const supplied = element.properties.strings;\n const result: FoundationStrings = { ...foundationStrings };\n if (typeof supplied !== 'object' || supplied === null || Array.isArray(supplied)) return result;\n\n for (const [name, value] of Object.entries(supplied as Record<string, unknown>)) {\n if (name in foundationStrings && typeof value === 'string') result[name as FoundationStringName] = value;\n }\n\n return result;\n}\n\n/** Replaces each `{name}` in a string with the value of the same name, leaving an unknown placeholder visible rather than blank. */\nexport function formatText(text: string, values: Record<string, string | number> = {}): string {\n return text.replace(/\\{(\\w+)\\}/g, (placeholder, name: string) => (name in values ? String(values[name]) : placeholder));\n}\n"],"names":["foundationStrings","loading","emptyHeadline","emptyHint","errorHeadline","errorHint","retry","noPermissionHeadline","noPermissionHint","noPermissionSubject","partialHeadline","partialHint","disabledNoPermission","trendUp","trendDown","trendFlat","trendComparison","statusSuccess","statusWarning","statusDanger","statusInfo","statusNeutral","chartNoData","chartDataTable","chartSeries","chartCategory","filterAdd","filterAddGroup","filterRemove","filterRemoveGroup","filterMatchAll","filterMatchAny","filterField","filterOperator","filterValue","filterClear","filterCondition","filterGroup","filterNoFields","opContains","opEquals","opNotEquals","opStartsWith","opIsEmpty","opGreater","opGreaterOrEqual","opLess","opLessOrEqual","opBefore","opAfter","opOn","opIs","opIsNot","opTrue","opFalse","filterSummary","filterSummaryOne","columnsChoose","columnsLocked","columnsReset","columnsMoveUp","columnsMoveDown","columnsShown","columnsNone","viewsLabel","viewsDefault","viewsSave","viewsManage","viewsNone","checklistProgress","checklistOwner","checklistDue","activityEmpty","avatarOverflow","avatarPeople","uploadDrop","uploadBrowse","uploadRemove","uploadTooLarge","uploadWrongType","uploadUploading","uploadDone","uploadFailed","approvalPending","approvalCurrent","approvalApproved","approvalRejected","approvalSkipped","approvalChain","orgExpand","orgCollapse","orgReports","matrixAllowed","matrixDenied","matrixGrant","matrixReadOnly","readFoundationStrings","element","supplied","properties","strings","result","Array","isArray","name","value","Object","entries","formatText","text","values","replace","placeholder","String"],"mappings":"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"}
|
|
@@ -9,6 +9,15 @@ export * from './EmptyState';
|
|
|
9
9
|
export * from './TrendChip';
|
|
10
10
|
export * from './StatusChip';
|
|
11
11
|
export * from './StatCard';
|
|
12
|
+
export * from './chartGeometry';
|
|
13
|
+
export * from './useElementWidth';
|
|
14
|
+
export * from './ChartWrapper';
|
|
15
|
+
export * from './filterModel';
|
|
16
|
+
export * from './FilterBuilder';
|
|
17
|
+
export * from './columnModel';
|
|
18
|
+
export * from './ColumnChooser';
|
|
19
|
+
export * from './viewModel';
|
|
20
|
+
export * from './SavedViewsMenu';
|
|
12
21
|
export * from './foundationDescriptors';
|
|
13
22
|
export * from './foundationComponentMetadata';
|
|
14
23
|
export * from './foundationSamples';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../foundation/index.ts"],"names":[],"mappings":"AAGA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../foundation/index.ts"],"names":[],"mappings":"AAGA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
|
|
@@ -9,6 +9,15 @@ export * from './EmptyState';
|
|
|
9
9
|
export * from './TrendChip';
|
|
10
10
|
export * from './StatusChip';
|
|
11
11
|
export * from './StatCard';
|
|
12
|
+
export * from './chartGeometry';
|
|
13
|
+
export * from './useElementWidth';
|
|
14
|
+
export * from './ChartWrapper';
|
|
15
|
+
export * from './filterModel';
|
|
16
|
+
export * from './FilterBuilder';
|
|
17
|
+
export * from './columnModel';
|
|
18
|
+
export * from './ColumnChooser';
|
|
19
|
+
export * from './viewModel';
|
|
20
|
+
export * from './SavedViewsMenu';
|
|
12
21
|
export * from './foundationDescriptors';
|
|
13
22
|
export * from './foundationComponentMetadata';
|
|
14
23
|
export * from './foundationSamples';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../foundation/index.ts"],"names":[],"mappings":"AAGA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../foundation/index.ts"],"names":[],"mappings":"AAGA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useElementWidth.d.ts","sourceRoot":"","sources":["../../../foundation/useElementWidth.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAA6B,MAAM,OAAO,CAAC;AAM7D,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAqBlG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useState, useLayoutEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
4
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
5
|
+
/**
|
|
6
|
+
* The width of an element, kept up to date, so a chart can draw at the size it is shown at instead of scaling a fixed drawing -
|
|
7
|
+
* which would shrink its labels with it on a phone. Where there is no `ResizeObserver` (a test environment) the fallback is used.
|
|
8
|
+
*/ function useElementWidth(reference, fallback) {
|
|
9
|
+
const [width, setWidth] = useState(fallback);
|
|
10
|
+
useLayoutEffect(()=>{
|
|
11
|
+
const element = reference.current;
|
|
12
|
+
if (!element) return;
|
|
13
|
+
const measure = ()=>{
|
|
14
|
+
const measured = Math.round(element.getBoundingClientRect().width);
|
|
15
|
+
if (measured > 0) setWidth(measured);
|
|
16
|
+
};
|
|
17
|
+
measure();
|
|
18
|
+
if (typeof ResizeObserver === 'undefined') return;
|
|
19
|
+
const observer = new ResizeObserver(measure);
|
|
20
|
+
observer.observe(element);
|
|
21
|
+
return ()=>observer.disconnect();
|
|
22
|
+
}, [
|
|
23
|
+
reference
|
|
24
|
+
]);
|
|
25
|
+
return width;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { useElementWidth };
|
|
29
|
+
//# sourceMappingURL=useElementWidth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useElementWidth.js","sources":["../../../foundation/useElementWidth.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 { RefObject, useLayoutEffect, useState } from 'react';\n\n/**\n * The width of an element, kept up to date, so a chart can draw at the size it is shown at instead of scaling a fixed drawing -\n * which would shrink its labels with it on a phone. Where there is no `ResizeObserver` (a test environment) the fallback is used.\n */\nexport function useElementWidth(reference: RefObject<HTMLElement | null>, fallback: number): number {\n const [width, setWidth] = useState(fallback);\n\n useLayoutEffect(() => {\n const element = reference.current;\n if (!element) return;\n\n const measure = () => {\n const measured = Math.round(element.getBoundingClientRect().width);\n if (measured > 0) setWidth(measured);\n };\n\n measure();\n if (typeof ResizeObserver === 'undefined') return;\n\n const observer = new ResizeObserver(measure);\n observer.observe(element);\n return () => observer.disconnect();\n }, [reference]);\n\n return width;\n}\n"],"names":["useElementWidth","reference","fallback","width","setWidth","useState","useLayoutEffect","element","current","measure","measured","Math","round","getBoundingClientRect","ResizeObserver","observer","observe","disconnect"],"mappings":";;AAAA;AACA;AAIA;;;AAGC,IACM,SAASA,eAAAA,CAAgBC,SAAwC,EAAEC,QAAgB,EAAA;AACtF,IAAA,MAAM,CAACC,KAAAA,EAAOC,QAAAA,CAAS,GAAGC,QAAAA,CAASH,QAAAA,CAAAA;IAEnCI,eAAAA,CAAgB,IAAA;QACZ,MAAMC,OAAAA,GAAUN,UAAUO,OAAO;AACjC,QAAA,IAAI,CAACD,OAAAA,EAAS;AAEd,QAAA,MAAME,OAAAA,GAAU,IAAA;AACZ,YAAA,MAAMC,WAAWC,IAAAA,CAAKC,KAAK,CAACL,OAAAA,CAAQM,qBAAqB,GAAGV,KAAK,CAAA;YACjE,IAAIO,QAAAA,GAAW,GAAGN,QAAAA,CAASM,QAAAA,CAAAA;AAC/B,QAAA,CAAA;AAEAD,QAAAA,OAAAA,EAAAA;QACA,IAAI,OAAOK,mBAAmB,WAAA,EAAa;QAE3C,MAAMC,QAAAA,GAAW,IAAID,cAAAA,CAAeL,OAAAA,CAAAA;AACpCM,QAAAA,QAAAA,CAASC,OAAO,CAACT,OAAAA,CAAAA;QACjB,OAAO,IAAMQ,SAASE,UAAU,EAAA;IACpC,CAAA,EAAG;AAAChB,QAAAA;AAAU,KAAA,CAAA;IAEd,OAAOE,KAAAA;AACX;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewModel.d.ts","sourceRoot":"","sources":["../../../foundation/viewModel.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAGD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,CASrD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
/** One saved view of a list: a named combination of filters, sort and columns. The definition lives with the application. */ /** Reads saved views out of a property value, dropping entries without an id. */ function readViews(value) {
|
|
4
|
+
if (!Array.isArray(value)) return [];
|
|
5
|
+
return value.flatMap((entry)=>{
|
|
6
|
+
if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return [];
|
|
7
|
+
const { id, label, description } = entry;
|
|
8
|
+
if (typeof id !== 'string' || id.length === 0) return [];
|
|
9
|
+
return [
|
|
10
|
+
{
|
|
11
|
+
id,
|
|
12
|
+
label: typeof label === 'string' && label.length > 0 ? label : id,
|
|
13
|
+
...typeof description === 'string' ? {
|
|
14
|
+
description
|
|
15
|
+
} : {}
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { readViews };
|
|
22
|
+
//# sourceMappingURL=viewModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewModel.js","sources":["../../../foundation/viewModel.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/** One saved view of a list: a named combination of filters, sort and columns. The definition lives with the application. */\nexport interface SavedView {\n id: string;\n label: string;\n description?: string;\n}\n\n/** Reads saved views out of a property value, dropping entries without an id. */\nexport function readViews(value: unknown): SavedView[] {\n if (!Array.isArray(value)) return [];\n\n return value.flatMap((entry): SavedView[] => {\n if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return [];\n const { id, label, description } = entry as Record<string, unknown>;\n if (typeof id !== 'string' || id.length === 0) return [];\n return [{ id, label: typeof label === 'string' && label.length > 0 ? label : id, ...(typeof description === 'string' ? { description } : {}) }];\n });\n}\n"],"names":["readViews","value","Array","isArray","flatMap","entry","id","label","description","length"],"mappings":"AAAA;AACA;AAEA,gNAQO,SAASA,UAAUC,KAAc,EAAA;AACpC,IAAA,IAAI,CAACC,KAAAA,CAAMC,OAAO,CAACF,KAAAA,CAAAA,EAAQ,OAAO,EAAE;IAEpC,OAAOA,KAAAA,CAAMG,OAAO,CAAC,CAACC,KAAAA,GAAAA;QAClB,IAAI,OAAOA,KAAAA,KAAU,QAAA,IAAYA,KAAAA,KAAU,IAAA,IAAQH,MAAMC,OAAO,CAACE,KAAAA,CAAAA,EAAQ,OAAO,EAAE;AAClF,QAAA,MAAM,EAAEC,EAAE,EAAEC,KAAK,EAAEC,WAAW,EAAE,GAAGH,KAAAA;QACnC,IAAI,OAAOC,OAAO,QAAA,IAAYA,EAAAA,CAAGG,MAAM,KAAK,CAAA,EAAG,OAAO,EAAE;QACxD,OAAO;AAAC,YAAA;AAAEH,gBAAAA,EAAAA;AAAIC,gBAAAA,KAAAA,EAAO,OAAOA,KAAAA,KAAU,QAAA,IAAYA,MAAME,MAAM,GAAG,IAAIF,KAAAA,GAAQD,EAAAA;gBAAI,GAAI,OAAOE,gBAAgB,QAAA,GAAW;AAAEA,oBAAAA;AAAY,iBAAA,GAAI;AAAI;AAAE,SAAA;AACnJ,IAAA,CAAA,CAAA;AACJ;;"}
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAGA,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAGA,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -63,6 +63,15 @@ export { EmptyState } from './foundation/EmptyState.js';
|
|
|
63
63
|
export { TrendChip, TrendChipView, trendDirection, trendOutcome } from './foundation/TrendChip.js';
|
|
64
64
|
export { StatusChip, StatusTone, readStatusTone, statusToneIcons } from './foundation/StatusChip.js';
|
|
65
65
|
export { StatCard } from './foundation/StatCard.js';
|
|
66
|
+
export { ChartKind, dataMaximum, donutSlices, funnelStages, niceScale, readSeries, ringPath } from './foundation/chartGeometry.js';
|
|
67
|
+
export { useElementWidth } from './foundation/useElementWidth.js';
|
|
68
|
+
export { ChartWrapper, readChartKind } from './foundation/ChartWrapper.js';
|
|
69
|
+
export { FilterFieldType, countActiveConditions, emptyFilter, filterOperators, maximumFilterDepth, newCondition, normalizeFilter, readFilterFields, updateGroupAt, valuelessOperators } from './foundation/filterModel.js';
|
|
70
|
+
export { FilterBuilder } from './foundation/FilterBuilder.js';
|
|
71
|
+
export { moveColumn, readColumns, toggleColumn, visibleColumnIds } from './foundation/columnModel.js';
|
|
72
|
+
export { ColumnChooser } from './foundation/ColumnChooser.js';
|
|
73
|
+
export { readViews } from './foundation/viewModel.js';
|
|
74
|
+
export { SavedViewsMenu, savedViewActionOutput } from './foundation/SavedViewsMenu.js';
|
|
66
75
|
export { bindable, foundationDescriptors, list, standardStateProperties } from './foundation/foundationDescriptors.js';
|
|
67
76
|
export { foundationComponentMetadata } from './foundation/foundationComponentMetadata.js';
|
|
68
77
|
export { foundationElement, foundationSamples } from './foundation/foundationSamples.js';
|
|
@@ -75,4 +84,21 @@ export { LayoutThemeProvider } from './themes/LayoutThemeProvider.js';
|
|
|
75
84
|
export { defaultBlueprintComponents } from './defaultBlueprintComponents.js';
|
|
76
85
|
export { defaultBlueprint, defaultBlueprintManifest } from './defaultBlueprint.js';
|
|
77
86
|
export { defaultBlueprintTemplateProvenance, sakaiCompositionProvenance } from './templateProvenance.js';
|
|
87
|
+
export { isSliceTarget } from './preview-host/PreviewTarget.js';
|
|
88
|
+
export { PreviewProblemCode, PreviewProblemSeverity, hasBlockingProblem } from './preview-host/PreviewProblem.js';
|
|
89
|
+
export { completeDocument } from './preview-host/ApplicationDocument.js';
|
|
90
|
+
export { blueprintPackageCatalog, previewProfile, requiredPackages } from './preview-host/previewProfile.js';
|
|
91
|
+
export { defaultApplicationChrome } from './preview-host/defaultApplicationChrome.js';
|
|
92
|
+
export { FlowArrangementView } from './preview-host/FlowArrangementView.js';
|
|
93
|
+
export { useSizeClass } from './preview-host/useSizeClass.js';
|
|
94
|
+
export { PreviewTemplate, previewComponents, previewTemplateComponent } from './preview-host/PreviewTemplate.js';
|
|
95
|
+
export { collectDestinations, composeApplicationScreen, composeDialog, composeOutletScreen, findLayout, screenContent, templateChainOf, templatePoolFor, templatesOf } from './preview-host/composeApplication.js';
|
|
96
|
+
export { resolvePreviewPlan } from './preview-host/resolvePreviewPlan.js';
|
|
97
|
+
export { diagnosePreview } from './preview-host/diagnosePreview.js';
|
|
98
|
+
export { collectQueryNames, createPreviewSampleData } from './preview-host/previewSampleData.js';
|
|
99
|
+
export { findSliceFragment } from './preview-host/PreviewSliceFragment.js';
|
|
100
|
+
export { PreviewToast } from './preview-host/PreviewToast.js';
|
|
101
|
+
export { PreviewProblemsView } from './preview-host/PreviewProblemsView.js';
|
|
102
|
+
export { ApplicationHost } from './preview-host/ApplicationHost.js';
|
|
103
|
+
export { ScenePreviewHost } from './preview-host/ScenePreviewHost.js';
|
|
78
104
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SceneDocument, Theme, UiProfile } from '@cratis/scene.model';
|
|
2
|
+
export type ApplicationDocument = Pick<SceneDocument, 'layouts' | 'screenTemplates' | 'screens'> & Partial<Pick<SceneDocument, 'dialogTemplates' | 'exposures' | 'instanceContributions'>> & {
|
|
3
|
+
uiProfiles?: UiProfile[];
|
|
4
|
+
themes?: Theme[];
|
|
5
|
+
};
|
|
6
|
+
export declare function completeDocument(application: ApplicationDocument): SceneDocument;
|
|
7
|
+
//# sourceMappingURL=ApplicationDocument.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApplicationDocument.d.ts","sourceRoot":"","sources":["../../../preview-host/ApplicationDocument.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAO3E,MAAM,MAAM,mBAAmB,GACzB,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,iBAAiB,GAAG,SAAS,CAAC,GAC9D,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,iBAAiB,GAAG,WAAW,GAAG,uBAAuB,CAAC,CAAC,GACvF;IAEE,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IAEzB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;CACpB,CAAC;AAGN,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,mBAAmB,GAAG,aAAa,CAShF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
/** The document with everything a template chain needs filled in. */ function completeDocument(application) {
|
|
4
|
+
return {
|
|
5
|
+
layouts: application.layouts,
|
|
6
|
+
screenTemplates: application.screenTemplates,
|
|
7
|
+
dialogTemplates: application.dialogTemplates ?? [],
|
|
8
|
+
screens: application.screens,
|
|
9
|
+
exposures: application.exposures ?? [],
|
|
10
|
+
instanceContributions: application.instanceContributions ?? []
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export { completeDocument };
|
|
15
|
+
//# sourceMappingURL=ApplicationDocument.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApplicationDocument.js","sources":["../../../preview-host/ApplicationDocument.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 type { SceneDocument, Theme, UiProfile } from '@cratis/scene.model';\n\n/**\n * What an application is made of: the document a designer edits - layouts, templates, screens, and what a template exposes and\n * each instance contributes - and the profile and theme the application renders with. Stage assembles it from a Screenplay\n * model, Studio from the model in memory (unsaved edits included); the composition and the hosts take nothing else.\n */\nexport type ApplicationDocument =\n & Pick<SceneDocument, 'layouts' | 'screenTemplates' | 'screens'>\n & Partial<Pick<SceneDocument, 'dialogTemplates' | 'exposures' | 'instanceContributions'>>\n & {\n /** The profiles the application declares; the first for the web is the one rendered with. */\n uiProfiles?: UiProfile[];\n\n themes?: Theme[];\n };\n\n/** The document with everything a template chain needs filled in. */\nexport function completeDocument(application: ApplicationDocument): SceneDocument {\n return {\n layouts: application.layouts,\n screenTemplates: application.screenTemplates,\n dialogTemplates: application.dialogTemplates ?? [],\n screens: application.screens,\n exposures: application.exposures ?? [],\n instanceContributions: application.instanceContributions ?? [],\n };\n}\n"],"names":["completeDocument","application","layouts","screenTemplates","dialogTemplates","screens","exposures","instanceContributions"],"mappings":"AAAA;AACA;AAmBA,sEACO,SAASA,gBAAAA,CAAiBC,WAAgC,EAAA;IAC7D,OAAO;AACHC,QAAAA,OAAAA,EAASD,YAAYC,OAAO;AAC5BC,QAAAA,eAAAA,EAAiBF,YAAYE,eAAe;QAC5CC,eAAAA,EAAiBH,WAAAA,CAAYG,eAAe,IAAI,EAAE;AAClDC,QAAAA,OAAAA,EAASJ,YAAYI,OAAO;QAC5BC,SAAAA,EAAWL,WAAAA,CAAYK,SAAS,IAAI,EAAE;QACtCC,qBAAAA,EAAuBN,WAAAA,CAAYM,qBAAqB,IAAI;AAChE,KAAA;AACJ;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { SceneElement, type EffectiveConfiguration } from '@cratis/scene.model';
|
|
3
|
+
import { BindingResolver } from '@cratis/scene.engine';
|
|
4
|
+
import { ComponentRegistry, SceneHistory, SceneNavigationContextValue, SceneNavigationModel } from '@cratis/scene.react';
|
|
5
|
+
import { ApplicationDocument } from './ApplicationDocument';
|
|
6
|
+
import { CompositionOptions } from './composeApplication';
|
|
7
|
+
export interface ApplicationHostProps {
|
|
8
|
+
application: ApplicationDocument;
|
|
9
|
+
composition?: CompositionOptions;
|
|
10
|
+
navigationModel: SceneNavigationModel;
|
|
11
|
+
registry: ComponentRegistry;
|
|
12
|
+
initialScreen: string;
|
|
13
|
+
history?: SceneHistory;
|
|
14
|
+
resolveBinding?: BindingResolver;
|
|
15
|
+
queryResults?: Record<string, unknown>;
|
|
16
|
+
renderScreen?(element: SceneElement, configuration: EffectiveConfiguration | undefined, navigation: SceneNavigationContextValue): ReactNode;
|
|
17
|
+
renderDialog?(navigation: SceneNavigationContextValue): ReactNode;
|
|
18
|
+
children?: ReactNode;
|
|
19
|
+
}
|
|
20
|
+
export declare function ApplicationHost({ application, composition, navigationModel, registry: hostRegistry, initialScreen, history, resolveBinding, queryResults, renderScreen, renderDialog, children }: ApplicationHostProps): import("react").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=ApplicationHost.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApplicationHost.d.ts","sourceRoot":"","sources":["../../../preview-host/ApplicationHost.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAqB,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAgB,MAAM,sBAAsB,CAAC;AACrE,OAAO,EACH,iBAAiB,EAAoB,YAAY,EAAE,2BAA2B,EAAE,oBAAoB,EAGvG,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAqF,MAAM,sBAAsB,CAAC;AAE7I,MAAM,WAAW,oBAAoB;IAEjC,WAAW,EAAE,mBAAmB,CAAC;IAGjC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAGjC,eAAe,EAAE,oBAAoB,CAAC;IAEtC,QAAQ,EAAE,iBAAiB,CAAC;IAG5B,aAAa,EAAE,MAAM,CAAC;IAGtB,OAAO,CAAC,EAAE,YAAY,CAAC;IAGvB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAQvC,YAAY,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,GAAG,SAAS,EAAE,UAAU,EAAE,2BAA2B,GAAG,SAAS,CAAC;IAM5I,YAAY,CAAC,CAAC,UAAU,EAAE,2BAA2B,GAAG,SAAS,CAAC;IAGlE,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AASD,wBAAgB,eAAe,CAAC,EAAE,WAAW,EAAE,WAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,oBAAoB,+BAkD3N"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useMemo } from 'react';
|
|
3
|
+
import { createMemorySceneHistory, collectOutletOwners, navigationDestinations, sceneRoutesFrom, useSceneHistoryNavigation, sliceDialogParameters, SceneElementView, SceneNavigationProvider, SceneOutletContext, SceneNavigationModelProvider, SliceDialogView } from '@cratis/scene.react';
|
|
4
|
+
import { LayoutConfigProvider } from '../configuration/LayoutConfigProvider.js';
|
|
5
|
+
import { previewComponents } from './PreviewTemplate.js';
|
|
6
|
+
import { composeOutletScreen, collectDestinations, composeApplicationScreen, composeDialog } from './composeApplication.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The application as both Stage and the preview host run it: the shell composed for the screen on the page
|
|
10
|
+
* (`composeApplicationScreen`), nested outlets holding the screens placed in them, the navigation model in scope for the shell's
|
|
11
|
+
* topbar and sidebar regions, every destination the document and the navigation lead to routed, and the dialog a toolbar slice
|
|
12
|
+
* button or a dialog destination opened shown over it - one place for all of it (spec PRV9), so a behaviour that differs between
|
|
13
|
+
* the two hosts is a bug in the host, not a second implementation.
|
|
14
|
+
*/ function ApplicationHost({ application, composition = {}, navigationModel, registry: hostRegistry, initialScreen, history, resolveBinding, queryResults, renderScreen, renderDialog, children }) {
|
|
15
|
+
const [memoryHistory] = useState(()=>createMemorySceneHistory());
|
|
16
|
+
const registry = useMemo(()=>({
|
|
17
|
+
...previewComponents,
|
|
18
|
+
...hostRegistry
|
|
19
|
+
}), [
|
|
20
|
+
hostRegistry
|
|
21
|
+
]);
|
|
22
|
+
const hostHistory = history ?? memoryHistory;
|
|
23
|
+
const screens = application.screens;
|
|
24
|
+
const outletScreens = useMemo(()=>Object.fromEntries(screens.map((candidate)=>[
|
|
25
|
+
candidate.name,
|
|
26
|
+
composeOutletScreen(application, candidate, composition)
|
|
27
|
+
])), [
|
|
28
|
+
application,
|
|
29
|
+
composition,
|
|
30
|
+
screens
|
|
31
|
+
]);
|
|
32
|
+
const owners = useMemo(()=>collectOutletOwners(outletScreens), [
|
|
33
|
+
outletScreens
|
|
34
|
+
]);
|
|
35
|
+
const destinations = useMemo(()=>[
|
|
36
|
+
...collectDestinations(application),
|
|
37
|
+
...navigationDestinations(navigationModel.structure, navigationModel.navigation, navigationModel.screenFor)
|
|
38
|
+
], [
|
|
39
|
+
application,
|
|
40
|
+
navigationModel
|
|
41
|
+
]);
|
|
42
|
+
const routes = useMemo(()=>sceneRoutesFrom(screens.map((candidate)=>candidate.name), destinations), [
|
|
43
|
+
destinations,
|
|
44
|
+
screens
|
|
45
|
+
]);
|
|
46
|
+
const bindingScope = useMemo(()=>({
|
|
47
|
+
queryResults
|
|
48
|
+
}), [
|
|
49
|
+
queryResults
|
|
50
|
+
]);
|
|
51
|
+
const navigation = useSceneHistoryNavigation(hostHistory, routes, initialScreen, bindingScope, owners, destinations);
|
|
52
|
+
const screen = screens.find((candidate)=>candidate.name === navigation.primaryScreen) ?? screens.find((candidate)=>candidate.name === initialScreen) ?? screens[0];
|
|
53
|
+
const composed = useMemo(()=>screen ? composeApplicationScreen(application, screen, composition) : undefined, [
|
|
54
|
+
application,
|
|
55
|
+
composition,
|
|
56
|
+
screen
|
|
57
|
+
]);
|
|
58
|
+
const outletContext = useMemo(()=>({
|
|
59
|
+
screens: outletScreens,
|
|
60
|
+
registry
|
|
61
|
+
}), [
|
|
62
|
+
outletScreens,
|
|
63
|
+
registry
|
|
64
|
+
]);
|
|
65
|
+
const dialogTemplate = navigation.currentDialog ? application.dialogTemplates?.find((candidate)=>candidate.name === navigation.currentDialog) : undefined;
|
|
66
|
+
const sliceDialog = !dialogTemplate && navigation.currentDialog && sliceDialogParameters(navigation.currentDialogParameters) !== undefined;
|
|
67
|
+
const dialogName = sliceDialogParameters(navigation.currentDialogParameters)?.title ?? navigation.currentDialog;
|
|
68
|
+
const drawn = composed ? renderScreen?.(composed.element, composed.configuration, navigation) ?? /*#__PURE__*/ jsx(SceneElementView, {
|
|
69
|
+
element: composed.element,
|
|
70
|
+
registry: registry,
|
|
71
|
+
resolveBinding: resolveBinding,
|
|
72
|
+
queryResults: queryResults,
|
|
73
|
+
configuration: composed.configuration
|
|
74
|
+
}) : null;
|
|
75
|
+
return /*#__PURE__*/ jsx(SceneNavigationProvider, {
|
|
76
|
+
value: navigation,
|
|
77
|
+
children: /*#__PURE__*/ jsx(SceneOutletContext.Provider, {
|
|
78
|
+
value: outletContext,
|
|
79
|
+
children: /*#__PURE__*/ jsx(SceneNavigationModelProvider, {
|
|
80
|
+
model: navigationModel,
|
|
81
|
+
children: /*#__PURE__*/ jsxs(LayoutConfigProvider, {
|
|
82
|
+
storage: null,
|
|
83
|
+
children: [
|
|
84
|
+
/*#__PURE__*/ jsx("div", {
|
|
85
|
+
"data-scene-outlet": "primary",
|
|
86
|
+
"data-scene-url": navigation.currentUrl,
|
|
87
|
+
"data-scene-screen": navigation.primaryScreen,
|
|
88
|
+
children: drawn
|
|
89
|
+
}),
|
|
90
|
+
(dialogTemplate || sliceDialog) && /*#__PURE__*/ jsx("div", {
|
|
91
|
+
role: "dialog",
|
|
92
|
+
"aria-modal": "true",
|
|
93
|
+
"aria-label": dialogName,
|
|
94
|
+
"data-scene-dialog": navigation.currentDialog,
|
|
95
|
+
children: dialogTemplate ? /*#__PURE__*/ jsx(SceneElementView, {
|
|
96
|
+
element: composeDialog(application, dialogTemplate, composition),
|
|
97
|
+
registry: registry,
|
|
98
|
+
resolveBinding: resolveBinding,
|
|
99
|
+
queryResults: queryResults
|
|
100
|
+
}) : renderDialog?.(navigation) ?? /*#__PURE__*/ jsx(SliceDialogView, {})
|
|
101
|
+
}),
|
|
102
|
+
children
|
|
103
|
+
]
|
|
104
|
+
})
|
|
105
|
+
})
|
|
106
|
+
})
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export { ApplicationHost };
|
|
111
|
+
//# sourceMappingURL=ApplicationHost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApplicationHost.js","sources":["../../../preview-host/ApplicationHost.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 { ReactNode, useMemo, useState } from 'react';\nimport { SceneElement, type EffectiveConfiguration } from '@cratis/scene.model';\nimport { BindingResolver, BindingScope } from '@cratis/scene.engine';\nimport {\n ComponentRegistry, SceneElementView, SceneHistory, SceneNavigationContextValue, SceneNavigationModel, SceneNavigationModelProvider,\n SceneNavigationProvider, SceneOutletContext, SliceDialogView, collectOutletOwners, createMemorySceneHistory, navigationDestinations,\n sceneRoutesFrom, sliceDialogParameters, useSceneHistoryNavigation,\n} from '@cratis/scene.react';\nimport { LayoutConfigProvider } from '../configuration';\nimport { ApplicationDocument } from './ApplicationDocument';\nimport { previewComponents } from './PreviewTemplate';\nimport { CompositionOptions, collectDestinations, composeApplicationScreen, composeDialog, composeOutletScreen } from './composeApplication';\n\nexport interface ApplicationHostProps {\n /** The document the application is composed from. */\n application: ApplicationDocument;\n\n /** What the host decides about composition; Stage and the preview host differ only here. */\n composition?: CompositionOptions;\n\n /** The structure and navigation the shell's regions show and the items' destinations resolve against. */\n navigationModel: SceneNavigationModel;\n\n registry: ComponentRegistry;\n\n /** The screen shown first. */\n initialScreen: string;\n\n /** Where entries are recorded: the address bar for Stage, an in-memory history for a preview, which never touches the host's URL (PRV4). */\n history?: SceneHistory;\n\n /** What the screens' bindings resolve against. */\n resolveBinding?: BindingResolver;\n queryResults?: Record<string, unknown>;\n\n /**\n * Draws the composed screen. The default renders it with `SceneElementView`; Stage wraps it with its data and command scope.\n * @param element The composed screen.\n * @param configuration What the screen's templates were configured with.\n * @param navigation Where the user is.\n */\n renderScreen?(element: SceneElement, configuration: EffectiveConfiguration | undefined, navigation: SceneNavigationContextValue): ReactNode;\n\n /**\n * Draws what the open dialog shows when the document has no dialog template of that name - a toolbar slice button's task\n * dialog by default.\n */\n renderDialog?(navigation: SceneNavigationContextValue): ReactNode;\n\n /** Rendered inside the host's providers, after the application. */\n children?: ReactNode;\n}\n\n/**\n * The application as both Stage and the preview host run it: the shell composed for the screen on the page\n * (`composeApplicationScreen`), nested outlets holding the screens placed in them, the navigation model in scope for the shell's\n * topbar and sidebar regions, every destination the document and the navigation lead to routed, and the dialog a toolbar slice\n * button or a dialog destination opened shown over it - one place for all of it (spec PRV9), so a behaviour that differs between\n * the two hosts is a bug in the host, not a second implementation.\n */\nexport function ApplicationHost({ application, composition = {}, navigationModel, registry: hostRegistry, initialScreen, history, resolveBinding, queryResults, renderScreen, renderDialog, children }: ApplicationHostProps) {\n const [memoryHistory] = useState(() => createMemorySceneHistory());\n const registry = useMemo(() => ({ ...previewComponents, ...hostRegistry }), [hostRegistry]);\n const hostHistory = history ?? memoryHistory;\n const screens = application.screens;\n\n const outletScreens = useMemo(\n () => Object.fromEntries(screens.map(candidate => [candidate.name, composeOutletScreen(application, candidate, composition)])),\n [application, composition, screens]);\n const owners = useMemo(() => collectOutletOwners(outletScreens), [outletScreens]);\n const destinations = useMemo(\n () => [...collectDestinations(application), ...navigationDestinations(navigationModel.structure, navigationModel.navigation, navigationModel.screenFor)],\n [application, navigationModel]);\n const routes = useMemo(() => sceneRoutesFrom(screens.map(candidate => candidate.name), destinations), [destinations, screens]);\n const bindingScope = useMemo<BindingScope>(() => ({ queryResults }), [queryResults]);\n const navigation = useSceneHistoryNavigation(hostHistory, routes, initialScreen, bindingScope, owners, destinations);\n\n const screen = screens.find(candidate => candidate.name === navigation.primaryScreen) ?? screens.find(candidate => candidate.name === initialScreen) ?? screens[0];\n const composed = useMemo(() => screen ? composeApplicationScreen(application, screen, composition) : undefined, [application, composition, screen]);\n const outletContext = useMemo(() => ({ screens: outletScreens, registry }), [outletScreens, registry]);\n\n const dialogTemplate = navigation.currentDialog ? application.dialogTemplates?.find(candidate => candidate.name === navigation.currentDialog) : undefined;\n const sliceDialog = !dialogTemplate && navigation.currentDialog && sliceDialogParameters(navigation.currentDialogParameters) !== undefined;\n const dialogName = sliceDialogParameters(navigation.currentDialogParameters)?.title ?? navigation.currentDialog;\n\n const drawn = composed\n ? renderScreen?.(composed.element, composed.configuration, navigation)\n ?? <SceneElementView element={composed.element} registry={registry} resolveBinding={resolveBinding} queryResults={queryResults} configuration={composed.configuration} />\n : null;\n\n return (\n <SceneNavigationProvider value={navigation}>\n <SceneOutletContext.Provider value={outletContext}>\n <SceneNavigationModelProvider model={navigationModel}>\n {/* The shell reads its layout configuration from a provider; nothing is saved from a hosted application's own. */}\n <LayoutConfigProvider storage={null}>\n <div data-scene-outlet='primary' data-scene-url={navigation.currentUrl} data-scene-screen={navigation.primaryScreen}>{drawn}</div>\n {(dialogTemplate || sliceDialog) && (\n <div role='dialog' aria-modal='true' aria-label={dialogName} data-scene-dialog={navigation.currentDialog}>\n {dialogTemplate\n ? <SceneElementView element={composeDialog(application, dialogTemplate, composition)} registry={registry} resolveBinding={resolveBinding} queryResults={queryResults} />\n : renderDialog?.(navigation) ?? <SliceDialogView />}\n </div>\n )}\n {children}\n </LayoutConfigProvider>\n </SceneNavigationModelProvider>\n </SceneOutletContext.Provider>\n </SceneNavigationProvider>\n );\n}\n"],"names":["ApplicationHost","application","composition","navigationModel","registry","hostRegistry","initialScreen","history","resolveBinding","queryResults","renderScreen","renderDialog","children","memoryHistory","useState","createMemorySceneHistory","useMemo","previewComponents","hostHistory","screens","outletScreens","Object","fromEntries","map","candidate","name","composeOutletScreen","owners","collectOutletOwners","destinations","collectDestinations","navigationDestinations","structure","navigation","screenFor","routes","sceneRoutesFrom","bindingScope","useSceneHistoryNavigation","screen","find","primaryScreen","composed","composeApplicationScreen","undefined","outletContext","dialogTemplate","currentDialog","dialogTemplates","sliceDialog","sliceDialogParameters","currentDialogParameters","dialogName","title","drawn","element","configuration","_jsx","SceneElementView","SceneNavigationProvider","value","SceneOutletContext","Provider","SceneNavigationModelProvider","model","_jsxs","LayoutConfigProvider","storage","div","data-scene-outlet","data-scene-url","currentUrl","data-scene-screen","role","aria-modal","aria-label","data-scene-dialog","composeDialog","SliceDialogView"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { type FlowNode } from '@cratis/scene.model';
|
|
3
|
+
export declare function FlowArrangementView({ node, slots }: {
|
|
4
|
+
node: FlowNode;
|
|
5
|
+
slots: Record<string, ReactNode>;
|
|
6
|
+
}): import("react").JSX.Element | null;
|
|
7
|
+
//# sourceMappingURL=FlowArrangementView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlowArrangementView.d.ts","sourceRoot":"","sources":["../../../preview-host/FlowArrangementView.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAevE,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;CAAE,sCA4BxG"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { FlowContainerKind } from '@cratis/scene.model';
|
|
3
|
+
import { isFlowSlotLeaf, isFlowGrid, isFlowContainer } from '@cratis/scene.engine';
|
|
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
|
+
* Renders a {@link FlowNode} tree - the same one `evaluateFlowArrangement` picks for the current size
|
|
9
|
+
* class - by walking it into nested flex/grid containers and dropping each named slot's real content into
|
|
10
|
+
* its {@link FlowSlotLeaf}. This is what turns a modeled `arrangement flow` (a layout's topbar/sidebar/
|
|
11
|
+
* content/footer, or a screen template's header/body/aside) into something that actually looks like more
|
|
12
|
+
* than one column, rather than every slot's content stacked flat regardless of what the document said.
|
|
13
|
+
*
|
|
14
|
+
* A fixed `width`/`height` on a slot is a known, documented gap in the arrangement it is fed (see
|
|
15
|
+
* the Screenplay converter) - only `grow` and `span` survive conversion. A slot that does not grow
|
|
16
|
+
* therefore sizes to its own content here, which is a reasonable rendering of "not growing" even though
|
|
17
|
+
* the exact pixel the author wrote is not carried this far yet.
|
|
18
|
+
*/ function FlowArrangementView({ node, slots }) {
|
|
19
|
+
if (isFlowSlotLeaf(node)) {
|
|
20
|
+
return /*#__PURE__*/ jsx(Fragment, {
|
|
21
|
+
children: slots[node.slotName] ?? null
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
if (isFlowGrid(node)) {
|
|
25
|
+
const style = {
|
|
26
|
+
gap: `${node.gap}px`,
|
|
27
|
+
gridTemplateColumns: node.columns ? `repeat(${node.columns}, 1fr)` : undefined,
|
|
28
|
+
gridTemplateRows: node.rows ? `repeat(${node.rows}, 1fr)` : undefined
|
|
29
|
+
};
|
|
30
|
+
return /*#__PURE__*/ jsx("div", {
|
|
31
|
+
className: "flow-container flow-container--grid",
|
|
32
|
+
style: style,
|
|
33
|
+
children: node.children.map((child, index)=>/*#__PURE__*/ jsx(FlowChild, {
|
|
34
|
+
node: child,
|
|
35
|
+
slots: slots
|
|
36
|
+
}, index))
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
if (isFlowContainer(node)) {
|
|
40
|
+
const direction = node.kind === FlowContainerKind.Row ? 'row' : 'column';
|
|
41
|
+
return /*#__PURE__*/ jsx("div", {
|
|
42
|
+
className: `flow-container flow-container--${direction}`,
|
|
43
|
+
style: {
|
|
44
|
+
gap: `${node.gap}px`
|
|
45
|
+
},
|
|
46
|
+
children: node.children.map((child, index)=>/*#__PURE__*/ jsx(FlowChild, {
|
|
47
|
+
node: child,
|
|
48
|
+
slots: slots
|
|
49
|
+
}, index))
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
function FlowChild({ node, slots }) {
|
|
55
|
+
const style = node.grow ? {
|
|
56
|
+
flex: `${node.grow} 1 0%`,
|
|
57
|
+
minWidth: 0,
|
|
58
|
+
minHeight: 0
|
|
59
|
+
} : {
|
|
60
|
+
flex: '0 0 auto'
|
|
61
|
+
};
|
|
62
|
+
return /*#__PURE__*/ jsx("div", {
|
|
63
|
+
className: "flow-child",
|
|
64
|
+
style: style,
|
|
65
|
+
children: /*#__PURE__*/ jsx(FlowArrangementView, {
|
|
66
|
+
node: node,
|
|
67
|
+
slots: slots
|
|
68
|
+
})
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export { FlowArrangementView };
|
|
73
|
+
//# sourceMappingURL=FlowArrangementView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlowArrangementView.js","sources":["../../../preview-host/FlowArrangementView.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 type { CSSProperties, ReactNode } from 'react';\nimport { FlowContainerKind, type FlowNode } from '@cratis/scene.model';\nimport { isFlowContainer, isFlowGrid, isFlowSlotLeaf } from '@cratis/scene.engine';\n\n/**\n * Renders a {@link FlowNode} tree - the same one `evaluateFlowArrangement` picks for the current size\n * class - by walking it into nested flex/grid containers and dropping each named slot's real content into\n * its {@link FlowSlotLeaf}. This is what turns a modeled `arrangement flow` (a layout's topbar/sidebar/\n * content/footer, or a screen template's header/body/aside) into something that actually looks like more\n * than one column, rather than every slot's content stacked flat regardless of what the document said.\n *\n * A fixed `width`/`height` on a slot is a known, documented gap in the arrangement it is fed (see\n * the Screenplay converter) - only `grow` and `span` survive conversion. A slot that does not grow\n * therefore sizes to its own content here, which is a reasonable rendering of \"not growing\" even though\n * the exact pixel the author wrote is not carried this far yet.\n */\nexport function FlowArrangementView({ node, slots }: { node: FlowNode; slots: Record<string, ReactNode> }) {\n if (isFlowSlotLeaf(node)) {\n return <>{slots[node.slotName] ?? null}</>;\n }\n\n if (isFlowGrid(node)) {\n const style: CSSProperties = {\n gap: `${node.gap}px`,\n gridTemplateColumns: node.columns ? `repeat(${node.columns}, 1fr)` : undefined,\n gridTemplateRows: node.rows ? `repeat(${node.rows}, 1fr)` : undefined,\n };\n return (\n <div className='flow-container flow-container--grid' style={style}>\n {node.children.map((child, index) => <FlowChild key={index} node={child} slots={slots} />)}\n </div>\n );\n }\n\n if (isFlowContainer(node)) {\n const direction = node.kind === FlowContainerKind.Row ? 'row' : 'column';\n return (\n <div className={`flow-container flow-container--${direction}`} style={{ gap: `${node.gap}px` }}>\n {node.children.map((child, index) => <FlowChild key={index} node={child} slots={slots} />)}\n </div>\n );\n }\n\n return null;\n}\n\nfunction FlowChild({ node, slots }: { node: FlowNode; slots: Record<string, ReactNode> }) {\n const style: CSSProperties = node.grow\n ? { flex: `${node.grow} 1 0%`, minWidth: 0, minHeight: 0 }\n : { flex: '0 0 auto' };\n return (\n <div className='flow-child' style={style}>\n <FlowArrangementView node={node} slots={slots} />\n </div>\n );\n}\n"],"names":["FlowArrangementView","node","slots","isFlowSlotLeaf","_jsx","_Fragment","slotName","isFlowGrid","style","gap","gridTemplateColumns","columns","undefined","gridTemplateRows","rows","div","className","children","map","child","index","FlowChild","isFlowContainer","direction","kind","FlowContainerKind","Row","grow","flex","minWidth","minHeight"],"mappings":";;;;AAAA;AACA;AAMA;;;;;;;;;;;AAWC,IACM,SAASA,mBAAAA,CAAoB,EAAEC,IAAI,EAAEC,KAAK,EAAwD,EAAA;AACrG,IAAA,IAAIC,eAAeF,IAAAA,CAAAA,EAAO;QACtB,qBAAOG,GAAA,CAAAC,QAAA,EAAA;AAAGH,YAAAA,QAAAA,EAAAA,KAAK,CAACD,IAAAA,CAAKK,QAAQ,CAAC,IAAI;;AACtC,IAAA;AAEA,IAAA,IAAIC,WAAWN,IAAAA,CAAAA,EAAO;AAClB,QAAA,MAAMO,KAAAA,GAAuB;AACzBC,YAAAA,GAAAA,EAAK,CAAA,EAAGR,IAAAA,CAAKQ,GAAG,CAAC,EAAE,CAAC;YACpBC,mBAAAA,EAAqBT,IAAAA,CAAKU,OAAO,GAAG,CAAC,OAAO,EAAEV,IAAAA,CAAKU,OAAO,CAAC,MAAM,CAAC,GAAGC,SAAAA;YACrEC,gBAAAA,EAAkBZ,IAAAA,CAAKa,IAAI,GAAG,CAAC,OAAO,EAAEb,IAAAA,CAAKa,IAAI,CAAC,MAAM,CAAC,GAAGF;AAChE,SAAA;AACA,QAAA,qBACIR,GAAA,CAACW,KAAAA,EAAAA;YAAIC,SAAAA,EAAU,qCAAA;YAAsCR,KAAAA,EAAOA,KAAAA;AACvDP,YAAAA,QAAAA,EAAAA,IAAAA,CAAKgB,QAAQ,CAACC,GAAG,CAAC,CAACC,KAAAA,EAAOC,sBAAUhB,GAAA,CAACiB,SAAAA,EAAAA;oBAAsBpB,IAAAA,EAAMkB,KAAAA;oBAAOjB,KAAAA,EAAOA;AAA3BkB,iBAAAA,EAAAA,KAAAA,CAAAA;;AAGjE,IAAA;AAEA,IAAA,IAAIE,gBAAgBrB,IAAAA,CAAAA,EAAO;AACvB,QAAA,MAAMsB,YAAYtB,IAAAA,CAAKuB,IAAI,KAAKC,iBAAAA,CAAkBC,GAAG,GAAG,KAAA,GAAQ,QAAA;AAChE,QAAA,qBACItB,GAAA,CAACW,KAAAA,EAAAA;YAAIC,SAAAA,EAAW,CAAC,+BAA+B,EAAEO,SAAAA,CAAAA,CAAW;YAAEf,KAAAA,EAAO;AAAEC,gBAAAA,GAAAA,EAAK,CAAA,EAAGR,IAAAA,CAAKQ,GAAG,CAAC,EAAE;AAAE,aAAA;AACxFR,YAAAA,QAAAA,EAAAA,IAAAA,CAAKgB,QAAQ,CAACC,GAAG,CAAC,CAACC,KAAAA,EAAOC,sBAAUhB,GAAA,CAACiB,SAAAA,EAAAA;oBAAsBpB,IAAAA,EAAMkB,KAAAA;oBAAOjB,KAAAA,EAAOA;AAA3BkB,iBAAAA,EAAAA,KAAAA,CAAAA;;AAGjE,IAAA;IAEA,OAAO,IAAA;AACX;AAEA,SAASC,SAAAA,CAAU,EAAEpB,IAAI,EAAEC,KAAK,EAAwD,EAAA;IACpF,MAAMM,KAAAA,GAAuBP,IAAAA,CAAK0B,IAAI,GAChC;AAAEC,QAAAA,IAAAA,EAAM,CAAA,EAAG3B,IAAAA,CAAK0B,IAAI,CAAC,KAAK,CAAC;QAAEE,QAAAA,EAAU,CAAA;QAAGC,SAAAA,EAAW;KAAE,GACvD;QAAEF,IAAAA,EAAM;AAAW,KAAA;AACzB,IAAA,qBACIxB,GAAA,CAACW,KAAAA,EAAAA;QAAIC,SAAAA,EAAU,YAAA;QAAaR,KAAAA,EAAOA,KAAAA;AAC/B,QAAA,QAAA,gBAAAJ,GAAA,CAACJ,mBAAAA,EAAAA;YAAoBC,IAAAA,EAAMA,IAAAA;YAAMC,KAAAA,EAAOA;;;AAGpD;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare enum PreviewProblemCode {
|
|
2
|
+
TargetNotFound = "targetNotFound",
|
|
3
|
+
ModuleWithoutFeatures = "moduleWithoutFeatures",
|
|
4
|
+
ScreenMissing = "screenMissing",
|
|
5
|
+
SliceNotPreviewable = "sliceNotPreviewable",
|
|
6
|
+
SliceFragmentMissing = "sliceFragmentMissing",
|
|
7
|
+
LayoutMissing = "layoutMissing",
|
|
8
|
+
TemplateMissing = "templateMissing",
|
|
9
|
+
TemplateUnplaced = "templateUnplaced",
|
|
10
|
+
StructureInvalid = "structureInvalid",
|
|
11
|
+
NavigationInvalid = "navigationInvalid",
|
|
12
|
+
ToolbarInvalid = "toolbarInvalid",
|
|
13
|
+
SampleDataInvalid = "sampleDataInvalid"
|
|
14
|
+
}
|
|
15
|
+
export declare enum PreviewProblemSeverity {
|
|
16
|
+
Error = "error",
|
|
17
|
+
Warning = "warning"
|
|
18
|
+
}
|
|
19
|
+
export interface PreviewProblem {
|
|
20
|
+
code: PreviewProblemCode;
|
|
21
|
+
severity: PreviewProblemSeverity;
|
|
22
|
+
message: string;
|
|
23
|
+
nodeId?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function hasBlockingProblem(problems: PreviewProblem[]): boolean;
|
|
26
|
+
//# sourceMappingURL=PreviewProblem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewProblem.d.ts","sourceRoot":"","sources":["../../../preview-host/PreviewProblem.ts"],"names":[],"mappings":"AAIA,oBAAY,kBAAkB;IAE1B,cAAc,mBAAmB;IAGjC,qBAAqB,0BAA0B;IAG/C,aAAa,kBAAkB;IAG/B,mBAAmB,wBAAwB;IAG3C,oBAAoB,yBAAyB;IAG7C,aAAa,kBAAkB;IAG/B,eAAe,oBAAoB;IAGnC,gBAAgB,qBAAqB;IAGrC,gBAAgB,qBAAqB;IAGrC,iBAAiB,sBAAsB;IAGvC,cAAc,mBAAmB;IAGjC,iBAAiB,sBAAsB;CAC1C;AAGD,oBAAY,sBAAsB;IAE9B,KAAK,UAAU;IAGf,OAAO,YAAY;CACtB;AAMD,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,sBAAsB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAGhB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAGD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAEtE"}
|