@cratis/scene.model 4.6.0 → 4.8.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.
Files changed (39) hide show
  1. package/dist/cjs/index.js +3 -0
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/layouts/Layout.js +2 -1
  4. package/dist/cjs/layouts/Layout.js.map +1 -1
  5. package/dist/cjs/screens/DialogTemplate.js +2 -1
  6. package/dist/cjs/screens/DialogTemplate.js.map +1 -1
  7. package/dist/cjs/screens/ScreenTemplate.js +2 -1
  8. package/dist/cjs/screens/ScreenTemplate.js.map +1 -1
  9. package/dist/cjs/screens/TemplateMetadata.js +21 -0
  10. package/dist/cjs/screens/TemplateMetadata.js.map +1 -0
  11. package/dist/esm/index.js +1 -0
  12. package/dist/esm/index.js.map +1 -1
  13. package/dist/esm/layouts/Layout.d.ts +2 -0
  14. package/dist/esm/layouts/Layout.d.ts.map +1 -1
  15. package/dist/esm/layouts/Layout.js +2 -1
  16. package/dist/esm/layouts/Layout.js.map +1 -1
  17. package/dist/esm/screens/DialogTemplate.d.ts +2 -0
  18. package/dist/esm/screens/DialogTemplate.d.ts.map +1 -1
  19. package/dist/esm/screens/DialogTemplate.js +2 -1
  20. package/dist/esm/screens/DialogTemplate.js.map +1 -1
  21. package/dist/esm/screens/ScreenTemplate.d.ts +2 -0
  22. package/dist/esm/screens/ScreenTemplate.d.ts.map +1 -1
  23. package/dist/esm/screens/ScreenTemplate.js +2 -1
  24. package/dist/esm/screens/ScreenTemplate.js.map +1 -1
  25. package/dist/esm/screens/TemplateMetadata.d.ts +14 -0
  26. package/dist/esm/screens/TemplateMetadata.d.ts.map +1 -0
  27. package/dist/esm/screens/TemplateMetadata.js +18 -0
  28. package/dist/esm/screens/TemplateMetadata.js.map +1 -0
  29. package/dist/esm/screens/index.d.ts +1 -0
  30. package/dist/esm/screens/index.d.ts.map +1 -1
  31. package/dist/esm/screens/index.js +1 -0
  32. package/dist/esm/screens/index.js.map +1 -1
  33. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  34. package/layouts/Layout.ts +5 -1
  35. package/package.json +1 -1
  36. package/screens/DialogTemplate.ts +5 -0
  37. package/screens/ScreenTemplate.ts +5 -0
  38. package/screens/TemplateMetadata.ts +26 -0
  39. package/screens/index.ts +1 -0
package/layouts/Layout.ts CHANGED
@@ -4,6 +4,7 @@
4
4
  import { Arrangement } from './Arrangement';
5
5
  import { Slot } from './Slot';
6
6
  import { Behavior } from '../interactions';
7
+ import { TemplateMetadata } from '../screens/TemplateMetadata';
7
8
 
8
9
  /**
9
10
  * A named template of slots that a {@link Screen} fills with content. Mirrors Screenplay's `layout`
@@ -27,6 +28,9 @@ export interface Layout {
27
28
  * attached further out or further in.
28
29
  */
29
30
  behaviors?: Behavior[];
31
+
32
+ /** Optional browse metadata; ApplicationShell retains this existing Layout role. */
33
+ metadata?: TemplateMetadata;
30
34
  }
31
35
 
32
- export const LayoutPropertyNames: (keyof Layout)[] = ['name', 'slots', 'arrangement', 'behaviors'];
36
+ export const LayoutPropertyNames: (keyof Layout)[] = ['name', 'slots', 'arrangement', 'behaviors', 'metadata'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cratis/scene.model",
3
- "version": "4.6.0",
3
+ "version": "4.8.0",
4
4
  "description": "The TypeScript mirror of Cratis.Scene.Model — the platform-agnostic Screen object model.",
5
5
  "keywords": [
6
6
  "cratis",
@@ -4,6 +4,7 @@
4
4
  import { SceneElement } from '../elements';
5
5
  import { Arrangement, Slot } from '../layouts';
6
6
  import { Behavior } from '../interactions';
7
+ import { TemplateMetadata } from './TemplateMetadata';
7
8
 
8
9
  /**
9
10
  * A reusable dialog structure — the same idea as a {@link ScreenTemplate}, for content that opens over an
@@ -51,6 +52,9 @@ export interface DialogTemplate {
51
52
  * attached further out or further in.
52
53
  */
53
54
  behaviors?: Behavior[];
55
+
56
+ /** Optional semantic type, browse category and scope restrictions. */
57
+ metadata?: TemplateMetadata;
54
58
  }
55
59
 
56
60
  export const DialogTemplatePropertyNames: (keyof DialogTemplate)[] = [
@@ -61,4 +65,5 @@ export const DialogTemplatePropertyNames: (keyof DialogTemplate)[] = [
61
65
  'displayName',
62
66
  'description',
63
67
  'behaviors',
68
+ 'metadata',
64
69
  ];
@@ -4,6 +4,7 @@
4
4
  import { SceneElement } from '../elements';
5
5
  import { Arrangement, Slot } from '../layouts';
6
6
  import { Behavior } from '../interactions';
7
+ import { TemplateMetadata } from './TemplateMetadata';
7
8
 
8
9
  /**
9
10
  * A reusable screen structure that fills a named slot on whatever contains it, and offers slots of its
@@ -63,6 +64,9 @@ export interface ScreenTemplate {
63
64
  * attached further out or further in.
64
65
  */
65
66
  behaviors?: Behavior[];
67
+
68
+ /** Optional semantic type, browse category and scope restrictions. */
69
+ metadata?: TemplateMetadata;
66
70
  }
67
71
 
68
72
  export const ScreenTemplatePropertyNames: (keyof ScreenTemplate)[] = [
@@ -74,4 +78,5 @@ export const ScreenTemplatePropertyNames: (keyof ScreenTemplate)[] = [
74
78
  'displayName',
75
79
  'description',
76
80
  'behaviors',
81
+ 'metadata',
77
82
  ];
@@ -0,0 +1,26 @@
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
+
4
+ /** The application hierarchy at which a reusable template is selected. */
5
+ export enum TemplateScope {
6
+ Application = 'Application',
7
+ Module = 'Module',
8
+ Feature = 'Feature',
9
+ Subfeature = 'Subfeature',
10
+ Slice = 'Slice',
11
+ }
12
+
13
+ /**
14
+ * Optional semantic and browsing metadata. Type and category are open strings so packages can
15
+ * introduce their own vocabulary without a Scene release. Category never determines applicability.
16
+ */
17
+ export interface TemplateMetadata {
18
+ /** Semantic role; built-in roles are ApplicationShell, Workspace, List, Detail, Form and Dialog. */
19
+ type?: string;
20
+ /** A package-defined browse category, preserved even when the host does not recognize it. */
21
+ category?: string;
22
+ /** Explicit scope restriction. Absent uses the structural role; an empty list allows no scope. */
23
+ scopes?: TemplateScope[];
24
+ }
25
+
26
+ export const TemplateMetadataPropertyNames: (keyof TemplateMetadata)[] = ['type', 'category', 'scopes'];
package/screens/index.ts CHANGED
@@ -4,3 +4,4 @@
4
4
  export * from './Screen';
5
5
  export * from './ScreenTemplate';
6
6
  export * from './DialogTemplate';
7
+ export * from './TemplateMetadata';