@cratis/scene.blueprint.default 4.12.0 → 4.14.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 (121) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/gallery/GalleryScreenPreview.js +6 -3
  3. package/dist/cjs/gallery/GalleryScreenPreview.js.map +1 -1
  4. package/dist/cjs/gallery/TemplatePreviewState.js +17 -0
  5. package/dist/cjs/gallery/TemplatePreviewState.js.map +1 -0
  6. package/dist/cjs/gallery/applyTemplatePreviewState.js +91 -0
  7. package/dist/cjs/gallery/applyTemplatePreviewState.js.map +1 -0
  8. package/dist/cjs/gallery/authTemplates.js +25 -6
  9. package/dist/cjs/gallery/authTemplates.js.map +1 -1
  10. package/dist/cjs/gallery/dialogTemplates.js +13 -3
  11. package/dist/cjs/gallery/dialogTemplates.js.map +1 -1
  12. package/dist/cjs/gallery/navigation.js +7 -0
  13. package/dist/cjs/gallery/navigation.js.map +1 -1
  14. package/dist/cjs/gallery/nesting.js +13 -3
  15. package/dist/cjs/gallery/nesting.js.map +1 -1
  16. package/dist/cjs/gallery/screens.js +10 -1
  17. package/dist/cjs/gallery/screens.js.map +1 -1
  18. package/dist/cjs/gallery/statusTemplates.js +19 -5
  19. package/dist/cjs/gallery/statusTemplates.js.map +1 -1
  20. package/dist/cjs/gallery/supportTemplates.js +23 -6
  21. package/dist/cjs/gallery/supportTemplates.js.map +1 -1
  22. package/dist/cjs/gallery/widgets.js +20 -6
  23. package/dist/cjs/gallery/widgets.js.map +1 -1
  24. package/dist/cjs/gallery/workspaceTemplates.js +137 -8
  25. package/dist/cjs/gallery/workspaceTemplates.js.map +1 -1
  26. package/dist/cjs/index.js +10 -0
  27. package/dist/cjs/index.js.map +1 -1
  28. package/dist/cjs/layouts/appShell.js +5 -1
  29. package/dist/cjs/layouts/appShell.js.map +1 -1
  30. package/dist/cjs/layouts/fullPage.js +5 -1
  31. package/dist/cjs/layouts/fullPage.js.map +1 -1
  32. package/dist/cjs/templateProvenance.js +46 -0
  33. package/dist/cjs/templateProvenance.js.map +1 -0
  34. package/dist/esm/gallery/ApplicationScreens.stories.d.ts +1 -0
  35. package/dist/esm/gallery/ApplicationScreens.stories.d.ts.map +1 -1
  36. package/dist/esm/gallery/ApplicationScreens.stories.js +2 -1
  37. package/dist/esm/gallery/ApplicationScreens.stories.js.map +1 -1
  38. package/dist/esm/gallery/GalleryScreenPreview.d.ts +3 -1
  39. package/dist/esm/gallery/GalleryScreenPreview.d.ts.map +1 -1
  40. package/dist/esm/gallery/GalleryScreenPreview.js +6 -3
  41. package/dist/esm/gallery/GalleryScreenPreview.js.map +1 -1
  42. package/dist/esm/gallery/PreviewStates.stories.d.ts +36 -0
  43. package/dist/esm/gallery/PreviewStates.stories.d.ts.map +1 -0
  44. package/dist/esm/gallery/PreviewStates.stories.js +27 -0
  45. package/dist/esm/gallery/PreviewStates.stories.js.map +1 -0
  46. package/dist/esm/gallery/TemplatePreviewState.d.ts +7 -0
  47. package/dist/esm/gallery/TemplatePreviewState.d.ts.map +1 -0
  48. package/dist/esm/gallery/TemplatePreviewState.js +15 -0
  49. package/dist/esm/gallery/TemplatePreviewState.js.map +1 -0
  50. package/dist/esm/gallery/applyTemplatePreviewState.d.ts +6 -0
  51. package/dist/esm/gallery/applyTemplatePreviewState.d.ts.map +1 -0
  52. package/dist/esm/gallery/applyTemplatePreviewState.js +87 -0
  53. package/dist/esm/gallery/applyTemplatePreviewState.js.map +1 -0
  54. package/dist/esm/gallery/authTemplates.d.ts.map +1 -1
  55. package/dist/esm/gallery/authTemplates.js +25 -6
  56. package/dist/esm/gallery/authTemplates.js.map +1 -1
  57. package/dist/esm/gallery/dialogTemplates.d.ts.map +1 -1
  58. package/dist/esm/gallery/dialogTemplates.js +13 -3
  59. package/dist/esm/gallery/dialogTemplates.js.map +1 -1
  60. package/dist/esm/gallery/index.d.ts +2 -0
  61. package/dist/esm/gallery/index.d.ts.map +1 -1
  62. package/dist/esm/gallery/index.js +2 -0
  63. package/dist/esm/gallery/index.js.map +1 -1
  64. package/dist/esm/gallery/navigation.d.ts.map +1 -1
  65. package/dist/esm/gallery/navigation.js +7 -0
  66. package/dist/esm/gallery/navigation.js.map +1 -1
  67. package/dist/esm/gallery/nesting.d.ts.map +1 -1
  68. package/dist/esm/gallery/nesting.js +13 -3
  69. package/dist/esm/gallery/nesting.js.map +1 -1
  70. package/dist/esm/gallery/screens.d.ts.map +1 -1
  71. package/dist/esm/gallery/screens.js +10 -1
  72. package/dist/esm/gallery/screens.js.map +1 -1
  73. package/dist/esm/gallery/statusTemplates.d.ts.map +1 -1
  74. package/dist/esm/gallery/statusTemplates.js +19 -5
  75. package/dist/esm/gallery/statusTemplates.js.map +1 -1
  76. package/dist/esm/gallery/supportTemplates.d.ts.map +1 -1
  77. package/dist/esm/gallery/supportTemplates.js +23 -6
  78. package/dist/esm/gallery/supportTemplates.js.map +1 -1
  79. package/dist/esm/gallery/widgets.d.ts +1 -1
  80. package/dist/esm/gallery/widgets.d.ts.map +1 -1
  81. package/dist/esm/gallery/widgets.js +20 -6
  82. package/dist/esm/gallery/widgets.js.map +1 -1
  83. package/dist/esm/gallery/workspaceTemplates.d.ts +1 -0
  84. package/dist/esm/gallery/workspaceTemplates.d.ts.map +1 -1
  85. package/dist/esm/gallery/workspaceTemplates.js +139 -11
  86. package/dist/esm/gallery/workspaceTemplates.js.map +1 -1
  87. package/dist/esm/index.d.ts +1 -0
  88. package/dist/esm/index.d.ts.map +1 -1
  89. package/dist/esm/index.js +4 -1
  90. package/dist/esm/index.js.map +1 -1
  91. package/dist/esm/layouts/appShell.d.ts.map +1 -1
  92. package/dist/esm/layouts/appShell.js +5 -1
  93. package/dist/esm/layouts/appShell.js.map +1 -1
  94. package/dist/esm/layouts/fullPage.d.ts.map +1 -1
  95. package/dist/esm/layouts/fullPage.js +5 -1
  96. package/dist/esm/layouts/fullPage.js.map +1 -1
  97. package/dist/esm/templateProvenance.d.ts +4 -0
  98. package/dist/esm/templateProvenance.d.ts.map +1 -0
  99. package/dist/esm/templateProvenance.js +43 -0
  100. package/dist/esm/templateProvenance.js.map +1 -0
  101. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  102. package/gallery/ApplicationScreens.stories.tsx +4 -1
  103. package/gallery/GalleryScreenPreview.tsx +8 -3
  104. package/gallery/PreviewStates.stories.tsx +56 -0
  105. package/gallery/TemplatePreviewState.ts +20 -0
  106. package/gallery/applyTemplatePreviewState.ts +69 -0
  107. package/gallery/authTemplates.ts +7 -0
  108. package/gallery/dialogTemplates.ts +4 -0
  109. package/gallery/index.ts +2 -0
  110. package/gallery/navigation.ts +1 -0
  111. package/gallery/nesting.ts +4 -0
  112. package/gallery/screens.ts +2 -1
  113. package/gallery/statusTemplates.ts +6 -1
  114. package/gallery/supportTemplates.ts +7 -1
  115. package/gallery/widgets.ts +14 -5
  116. package/gallery/workspaceTemplates.ts +64 -4
  117. package/index.ts +1 -0
  118. package/layouts/appShell.ts +2 -0
  119. package/layouts/fullPage.ts +2 -0
  120. package/package.json +8 -7
  121. package/templateProvenance.ts +37 -0
@@ -5,14 +5,15 @@ import '../layouts/shellComponents.js';
5
5
  import '../layouts/appShell.js';
6
6
  import '../layouts/fullPage.js';
7
7
  import { TemplateSlotName } from './TemplateSlotName.js';
8
- import { button, externalComponent, card, text } from './elements.js';
9
- import { widget, table, statCard, pageHeader, formActions, emptyState, field } from './widgets.js';
8
+ import { button, externalComponent, text, card } from './elements.js';
9
+ import { widget, table, statCard, pageHeader, formActions, field, emptyState } from './widgets.js';
10
+ import { sakaiCompositionProvenance, defaultBlueprintTemplateProvenance } from '../templateProvenance.js';
10
11
 
11
12
  // Copyright (c) Cratis. All rights reserved.
12
13
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
13
14
  /**
14
- * The five workhorse shapes inside an application shell: a dashboard, a list, a detail, a form and the
15
- * designed empty state.
15
+ * The six workhorse shapes inside an application shell: a dashboard, a list, master/detail, a detail, a
16
+ * form and the designed empty state.
16
17
  *
17
18
  * Every one fits the layout's `content` slot, and every one carries realistic seeded content rather than
18
19
  * placeholder text. A gallery whose dashboard shows four boxes labeled "Card" proves the renderer runs; a
@@ -166,7 +167,10 @@ import { widget, table, statCard, pageHeader, formActions, emptyState, field } f
166
167
  ]
167
168
  },
168
169
  displayName: 'Dashboard',
169
- description: 'Four stat cards over two columns of widgets - the composition every template line opens with.'
170
+ description: 'Four stat cards over two columns of widgets - the composition every template line opens with.',
171
+ metadata: {
172
+ ...sakaiCompositionProvenance
173
+ }
170
174
  };
171
175
  /** The list: a filter toolbar, a real table, and the row actions a list needs. */ const crudListTemplate = {
172
176
  name: 'CrudList',
@@ -192,7 +196,8 @@ import { widget, table, statCard, pageHeader, formActions, emptyState, field } f
192
196
  })
193
197
  ]),
194
198
  externalComponent('crud-search', 'inputText', {
195
- placeholder: 'Search products'
199
+ placeholder: 'Search products',
200
+ ariaLabel: 'Search products'
196
201
  })
197
202
  ],
198
203
  [TemplateSlotName.Body]: [
@@ -257,7 +262,10 @@ import { widget, table, statCard, pageHeader, formActions, emptyState, field } f
257
262
  ]
258
263
  },
259
264
  displayName: 'List',
260
- description: 'A searchable table with a header, primary action and row data.'
265
+ description: 'A searchable table with a header, primary action and row data.',
266
+ metadata: {
267
+ ...defaultBlueprintTemplateProvenance
268
+ }
261
269
  };
262
270
  /** The detail: a summary panel beside the record's own sections. */ const detailViewTemplate = {
263
271
  name: 'DetailView',
@@ -308,7 +316,120 @@ import { widget, table, statCard, pageHeader, formActions, emptyState, field } f
308
316
  ]
309
317
  },
310
318
  displayName: 'Detail',
311
- description: 'One record: a header with actions, its sections, and a summary panel.'
319
+ description: 'One record: a header with actions, its sections, and a summary panel.',
320
+ metadata: {
321
+ ...defaultBlueprintTemplateProvenance
322
+ }
323
+ };
324
+ /**
325
+ * Master/detail: the list and the selected record side by side, so working through records does not mean
326
+ * leaving the list. The detail region is an outlet that accepts detail screens, which is what lets a row's
327
+ * destination open a full detail screen in place.
328
+ *
329
+ * At a compact width the two stack, list first, because side-by-side on a phone is two unreadable halves.
330
+ */ const masterDetailTemplate = {
331
+ name: 'MasterDetail',
332
+ fitsSlot: SlotName.Content,
333
+ slots: [
334
+ {
335
+ name: TemplateSlotName.Header
336
+ },
337
+ {
338
+ name: TemplateSlotName.Primary
339
+ },
340
+ {
341
+ name: TemplateSlotName.SidePanel
342
+ }
343
+ ],
344
+ outlets: [
345
+ {
346
+ name: 'master-detail.detail',
347
+ description: 'The selected record.',
348
+ accepts: [
349
+ 'Detail'
350
+ ]
351
+ }
352
+ ],
353
+ arrangement: {
354
+ root: column([
355
+ slotLeaf(TemplateSlotName.Header),
356
+ grid([
357
+ slotLeaf(TemplateSlotName.Primary),
358
+ slotLeaf(TemplateSlotName.SidePanel)
359
+ ], 2, 16)
360
+ ], 16),
361
+ overrides: [
362
+ {
363
+ width: WidthSizeClass.Compact,
364
+ root: column([
365
+ slotLeaf(TemplateSlotName.Header),
366
+ slotLeaf(TemplateSlotName.Primary),
367
+ slotLeaf(TemplateSlotName.SidePanel)
368
+ ], 16)
369
+ }
370
+ ]
371
+ },
372
+ content: {
373
+ [TemplateSlotName.Header]: [
374
+ pageHeader('master-header', 'Customers', '1,204 customers, 38 with overdue invoices')
375
+ ],
376
+ [TemplateSlotName.Primary]: [
377
+ table('customers-table', [
378
+ {
379
+ field: 'name',
380
+ header: 'Customer'
381
+ },
382
+ {
383
+ field: 'city',
384
+ header: 'City'
385
+ },
386
+ {
387
+ field: 'balance',
388
+ header: 'Balance'
389
+ }
390
+ ], [
391
+ {
392
+ name: 'Northwind Traders',
393
+ city: 'Seattle',
394
+ balance: '$4,200.00'
395
+ },
396
+ {
397
+ name: 'Contoso Ltd',
398
+ city: 'Oslo',
399
+ balance: '$0.00'
400
+ },
401
+ {
402
+ name: 'Fabrikam',
403
+ city: 'Lyon',
404
+ balance: '$12,940.50'
405
+ },
406
+ {
407
+ name: 'Adventure Works',
408
+ city: 'Denver',
409
+ balance: '$318.20'
410
+ }
411
+ ], 'No customers match the search')
412
+ ],
413
+ [TemplateSlotName.SidePanel]: [
414
+ widget('customer-detail', 'Northwind Traders', [
415
+ text('customer-contact', 'Contact: Amelia Nyquist'),
416
+ text('customer-terms', 'Payment terms: 30 days'),
417
+ externalComponent('customer-status', 'tag', {
418
+ value: 'Overdue',
419
+ severity: 'warning'
420
+ }),
421
+ button('customer-open', 'Open customer', {
422
+ severity: 'primary'
423
+ })
424
+ ])
425
+ ]
426
+ },
427
+ displayName: 'Master/detail',
428
+ description: 'A list beside the selected record, stacking on narrow screens.',
429
+ metadata: {
430
+ ...defaultBlueprintTemplateProvenance,
431
+ type: 'Workspace'
432
+ }
312
433
  };
313
434
  /** The form: fields, grouped, with the actions that close them. */ const formPageTemplate = {
314
435
  name: 'FormPage',
@@ -358,7 +479,10 @@ import { widget, table, statCard, pageHeader, formActions, emptyState, field } f
358
479
  ]
359
480
  },
360
481
  displayName: 'Form',
361
- description: 'A grouped form with the field types an application actually uses.'
482
+ description: 'A grouped form with the field types an application actually uses.',
483
+ metadata: {
484
+ ...defaultBlueprintTemplateProvenance
485
+ }
362
486
  };
363
487
  /** The empty state: what a list looks like before anything exists, designed rather than apologized for. */ const emptyTemplate = {
364
488
  name: 'Empty',
@@ -374,15 +498,19 @@ import { widget, table, statCard, pageHeader, formActions, emptyState, field } f
374
498
  ]
375
499
  },
376
500
  displayName: 'Empty state',
377
- description: 'The designed empty state for a list that has nothing in it yet.'
501
+ description: 'The designed empty state for a list that has nothing in it yet.',
502
+ metadata: {
503
+ ...defaultBlueprintTemplateProvenance
504
+ }
378
505
  };
379
506
  /** The five workspace templates. */ const workspaceTemplates = [
380
507
  dashboardTemplate,
381
508
  crudListTemplate,
509
+ masterDetailTemplate,
382
510
  detailViewTemplate,
383
511
  formPageTemplate,
384
512
  emptyTemplate
385
513
  ];
386
514
 
387
- export { crudListTemplate, dashboardTemplate, detailViewTemplate, emptyTemplate, formPageTemplate, workspaceTemplates };
515
+ export { crudListTemplate, dashboardTemplate, detailViewTemplate, emptyTemplate, formPageTemplate, masterDetailTemplate, workspaceTemplates };
388
516
  //# sourceMappingURL=workspaceTemplates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspaceTemplates.js","sources":["../../../gallery/workspaceTemplates.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ScreenTemplate, WidthSizeClass } from '@cratis/scene.model';\nimport { SlotName, column, grid, slotLeaf } from '../layouts';\nimport { TemplateSlotName } from './TemplateSlotName';\nimport { button, card, externalComponent, text } from './elements';\nimport { emptyState, field, formActions, pageHeader, statCard, table, widget } from './widgets';\n\n/**\n * The five workhorse shapes inside an application shell: a dashboard, a list, a detail, a form and the\n * designed empty state.\n *\n * Every one fits the layout's `content` slot, and every one carries realistic seeded content rather than\n * placeholder text. A gallery whose dashboard shows four boxes labeled \"Card\" proves the renderer runs; a\n * gallery whose dashboard shows revenue, orders, customers and a real table proves the blueprint is worth\n * starting an application from.\n */\n\n/**\n * The dashboard: four figures across the top, then two columns of larger widgets.\n *\n * This is Sakai's composition, and the reason to copy it is that it is the arrangement people already read\n * fluently - the eye takes the row of numbers first and then settles into the detail.\n *\n * Its own arrangement collapses the two columns into one at a compact width, because a two-column widget\n * grid on a phone is two columns of unreadable slivers.\n */\nexport const dashboardTemplate: ScreenTemplate = {\n name: 'Dashboard',\n fitsSlot: SlotName.Content,\n slots: [{ name: TemplateSlotName.Stats }, { name: TemplateSlotName.Primary }, { name: TemplateSlotName.Secondary }],\n arrangement: {\n root: column([slotLeaf(TemplateSlotName.Stats), grid([slotLeaf(TemplateSlotName.Primary, { span: 2 }), slotLeaf(TemplateSlotName.Secondary)], 3, 16)]),\n overrides: [\n {\n width: WidthSizeClass.Compact,\n root: column([slotLeaf(TemplateSlotName.Stats), slotLeaf(TemplateSlotName.Primary), slotLeaf(TemplateSlotName.Secondary)], 16),\n },\n ],\n },\n content: {\n [TemplateSlotName.Stats]: [\n statCard('stat-revenue', 'Revenue', '$284,120', '+12.4% this month', 'pi pi-dollar'),\n statCard('stat-orders', 'Orders', '1,842', '+3.1% this month', 'pi pi-shopping-cart'),\n statCard('stat-customers', 'Customers', '9,410', '+128 new', 'pi pi-users'),\n statCard('stat-open', 'Open tickets', '17', '-4 since Monday', 'pi pi-inbox'),\n ],\n [TemplateSlotName.Primary]: [\n widget('widget-revenue', 'Revenue over time', [\n table(\n 'revenue-table',\n [\n { field: 'month', header: 'Month' },\n { field: 'revenue', header: 'Revenue' },\n { field: 'change', header: 'Change' },\n ],\n [\n { month: 'March', revenue: '$284,120', change: '+12.4%' },\n { month: 'February', revenue: '$252,780', change: '+4.1%' },\n { month: 'January', revenue: '$242,830', change: '-1.8%' },\n { month: 'December', revenue: '$247,290', change: '+9.6%' },\n ],\n ),\n ]),\n widget('widget-orders', 'Recent orders', [\n table(\n 'orders-table',\n [\n { field: 'reference', header: 'Reference' },\n { field: 'customer', header: 'Customer' },\n { field: 'total', header: 'Total' },\n { field: 'status', header: 'Status' },\n ],\n [\n { reference: 'ORD-4192', customer: 'Northwind Traders', total: '$1,240.00', status: 'Shipped' },\n { reference: 'ORD-4191', customer: 'Contoso Ltd', total: '$318.50', status: 'Packing' },\n { reference: 'ORD-4188', customer: 'Fabrikam', total: '$2,980.00', status: 'Awaiting payment' },\n { reference: 'ORD-4184', customer: 'Adventure Works', total: '$76.20', status: 'Shipped' },\n ],\n ),\n ]),\n ],\n [TemplateSlotName.Secondary]: [\n widget('widget-activity', 'Activity', [externalComponent('activity-timeline', 'timeline', { align: 'left' })]),\n widget('widget-capacity', 'Warehouse capacity', [externalComponent('capacity-bar', 'progressBar', { value: 68 })]),\n ],\n },\n displayName: 'Dashboard',\n description: 'Four stat cards over two columns of widgets - the composition every template line opens with.',\n};\n\n/** The list: a filter toolbar, a real table, and the row actions a list needs. */\nexport const crudListTemplate: ScreenTemplate = {\n name: 'CrudList',\n fitsSlot: SlotName.Content,\n slots: [{ name: TemplateSlotName.Toolbar }, { name: TemplateSlotName.Body }],\n content: {\n [TemplateSlotName.Toolbar]: [\n pageHeader('crud-header', 'Products', '412 products across 9 categories', [\n button('crud-new', 'New product', { severity: 'primary', icon: 'pi pi-plus' }),\n button('crud-import', 'Import', { severity: 'secondary', icon: 'pi pi-upload' }),\n ]),\n externalComponent('crud-search', 'inputText', { placeholder: 'Search products' }),\n ],\n [TemplateSlotName.Body]: [\n table(\n 'products-table',\n [\n { field: 'code', header: 'Code' },\n { field: 'name', header: 'Name' },\n { field: 'category', header: 'Category' },\n { field: 'price', header: 'Price' },\n { field: 'stock', header: 'In stock' },\n ],\n [\n { code: 'P-1001', name: 'Bamboo Watch', category: 'Accessories', price: '$65.00', stock: 24 },\n { code: 'P-1002', name: 'Black Watch', category: 'Accessories', price: '$72.00', stock: 61 },\n { code: 'P-1003', name: 'Blue Band', category: 'Fitness', price: '$79.00', stock: 2 },\n { code: 'P-1004', name: 'Blue T-Shirt', category: 'Clothing', price: '$29.00', stock: 25 },\n { code: 'P-1005', name: 'Bracelet', category: 'Accessories', price: '$15.00', stock: 73 },\n ],\n ),\n ],\n },\n displayName: 'List',\n description: 'A searchable table with a header, primary action and row data.',\n};\n\n/** The detail: a summary panel beside the record's own sections. */\nexport const detailViewTemplate: ScreenTemplate = {\n name: 'DetailView',\n fitsSlot: SlotName.Content,\n slots: [{ name: TemplateSlotName.Header }, { name: TemplateSlotName.Body }, { name: TemplateSlotName.SidePanel }],\n content: {\n [TemplateSlotName.Header]: [\n pageHeader('detail-header', 'Bamboo Watch', 'P-1001 · Accessories', [\n button('detail-edit', 'Edit', { severity: 'primary', icon: 'pi pi-pencil' }),\n button('detail-archive', 'Archive', { severity: 'secondary', icon: 'pi pi-inbox' }),\n ]),\n ],\n [TemplateSlotName.Body]: [\n widget('detail-description', 'Description', [\n text('detail-description-text', 'A bamboo-cased watch with a sapphire face and a recycled steel strap.'),\n ]),\n widget('detail-history', 'Price history', [externalComponent('detail-history-timeline', 'timeline', { align: 'left' })]),\n ],\n [TemplateSlotName.SidePanel]: [\n widget('detail-summary', 'Summary', [\n text('detail-stock', 'In stock: 24'),\n text('detail-reserved', 'Reserved: 3'),\n externalComponent('detail-status', 'tag', { value: 'Active', severity: 'success' }),\n ]),\n ],\n },\n displayName: 'Detail',\n description: 'One record: a header with actions, its sections, and a summary panel.',\n};\n\n/** The form: fields, grouped, with the actions that close them. */\nexport const formPageTemplate: ScreenTemplate = {\n name: 'FormPage',\n fitsSlot: SlotName.Content,\n slots: [{ name: TemplateSlotName.Header }, { name: TemplateSlotName.Body }, { name: TemplateSlotName.Actions }],\n content: {\n [TemplateSlotName.Header]: [pageHeader('form-header', 'New product', 'Everything marked with an asterisk is required')],\n [TemplateSlotName.Body]: [\n card('form-card', [\n field('form-name', 'Name', 'inputText', { placeholder: 'Bamboo Watch' }),\n field('form-code', 'Code', 'inputText', { placeholder: 'P-1001' }),\n field('form-category', 'Category', 'dropdown', { options: ['Accessories', 'Clothing', 'Fitness'] }),\n field('form-price', 'Price', 'inputNumber', { mode: 'currency', currency: 'USD' }),\n field('form-available', 'Available from', 'calendar', {}),\n field('form-notes', 'Notes', 'inputTextarea', { rows: 4 }),\n ]),\n ],\n [TemplateSlotName.Actions]: [formActions('form-actions', 'Create product')],\n },\n displayName: 'Form',\n description: 'A grouped form with the field types an application actually uses.',\n};\n\n/** The empty state: what a list looks like before anything exists, designed rather than apologized for. */\nexport const emptyTemplate: ScreenTemplate = {\n name: 'Empty',\n fitsSlot: SlotName.Content,\n slots: [{ name: TemplateSlotName.Body }],\n content: {\n [TemplateSlotName.Body]: [\n emptyState('empty-state', 'No products yet', 'Products you create will show up here, with their stock and pricing.', 'Create the first product'),\n ],\n },\n displayName: 'Empty state',\n description: 'The designed empty state for a list that has nothing in it yet.',\n};\n\n/** The five workspace templates. */\nexport const workspaceTemplates: ScreenTemplate[] = [dashboardTemplate, crudListTemplate, detailViewTemplate, formPageTemplate, emptyTemplate];\n"],"names":["dashboardTemplate","name","fitsSlot","SlotName","Content","slots","TemplateSlotName","Stats","Primary","Secondary","arrangement","root","column","slotLeaf","grid","span","overrides","width","WidthSizeClass","Compact","content","statCard","widget","table","field","header","month","revenue","change","reference","customer","total","status","externalComponent","align","value","displayName","description","crudListTemplate","Toolbar","Body","pageHeader","button","severity","icon","placeholder","code","category","price","stock","detailViewTemplate","Header","SidePanel","text","formPageTemplate","Actions","card","options","mode","currency","rows","formActions","emptyTemplate","emptyState","workspaceTemplates"],"mappings":"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"}
1
+ {"version":3,"file":"workspaceTemplates.js","sources":["../../../gallery/workspaceTemplates.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ScreenTemplate, WidthSizeClass } from '@cratis/scene.model';\nimport { SlotName, column, grid, slotLeaf } from '../layouts';\nimport { TemplateSlotName } from './TemplateSlotName';\nimport { button, card, externalComponent, text } from './elements';\nimport { emptyState, field, formActions, pageHeader, statCard, table, widget } from './widgets';\nimport { defaultBlueprintTemplateProvenance, sakaiCompositionProvenance } from '../templateProvenance';\n\n/**\n * The six workhorse shapes inside an application shell: a dashboard, a list, master/detail, a detail, a\n * form and the designed empty state.\n *\n * Every one fits the layout's `content` slot, and every one carries realistic seeded content rather than\n * placeholder text. A gallery whose dashboard shows four boxes labeled \"Card\" proves the renderer runs; a\n * gallery whose dashboard shows revenue, orders, customers and a real table proves the blueprint is worth\n * starting an application from.\n */\n\n/**\n * The dashboard: four figures across the top, then two columns of larger widgets.\n *\n * This is Sakai's composition, and the reason to copy it is that it is the arrangement people already read\n * fluently - the eye takes the row of numbers first and then settles into the detail.\n *\n * Its own arrangement collapses the two columns into one at a compact width, because a two-column widget\n * grid on a phone is two columns of unreadable slivers.\n */\nexport const dashboardTemplate: ScreenTemplate = {\n name: 'Dashboard',\n fitsSlot: SlotName.Content,\n slots: [{ name: TemplateSlotName.Stats }, { name: TemplateSlotName.Primary }, { name: TemplateSlotName.Secondary }],\n arrangement: {\n root: column([slotLeaf(TemplateSlotName.Stats), grid([slotLeaf(TemplateSlotName.Primary, { span: 2 }), slotLeaf(TemplateSlotName.Secondary)], 3, 16)]),\n overrides: [\n {\n width: WidthSizeClass.Compact,\n root: column([slotLeaf(TemplateSlotName.Stats), slotLeaf(TemplateSlotName.Primary), slotLeaf(TemplateSlotName.Secondary)], 16),\n },\n ],\n },\n content: {\n [TemplateSlotName.Stats]: [\n statCard('stat-revenue', 'Revenue', '$284,120', '+12.4% this month', 'pi pi-dollar'),\n statCard('stat-orders', 'Orders', '1,842', '+3.1% this month', 'pi pi-shopping-cart'),\n statCard('stat-customers', 'Customers', '9,410', '+128 new', 'pi pi-users'),\n statCard('stat-open', 'Open tickets', '17', '-4 since Monday', 'pi pi-inbox'),\n ],\n [TemplateSlotName.Primary]: [\n widget('widget-revenue', 'Revenue over time', [\n table(\n 'revenue-table',\n [\n { field: 'month', header: 'Month' },\n { field: 'revenue', header: 'Revenue' },\n { field: 'change', header: 'Change' },\n ],\n [\n { month: 'March', revenue: '$284,120', change: '+12.4%' },\n { month: 'February', revenue: '$252,780', change: '+4.1%' },\n { month: 'January', revenue: '$242,830', change: '-1.8%' },\n { month: 'December', revenue: '$247,290', change: '+9.6%' },\n ],\n ),\n ]),\n widget('widget-orders', 'Recent orders', [\n table(\n 'orders-table',\n [\n { field: 'reference', header: 'Reference' },\n { field: 'customer', header: 'Customer' },\n { field: 'total', header: 'Total' },\n { field: 'status', header: 'Status' },\n ],\n [\n { reference: 'ORD-4192', customer: 'Northwind Traders', total: '$1,240.00', status: 'Shipped' },\n { reference: 'ORD-4191', customer: 'Contoso Ltd', total: '$318.50', status: 'Packing' },\n { reference: 'ORD-4188', customer: 'Fabrikam', total: '$2,980.00', status: 'Awaiting payment' },\n { reference: 'ORD-4184', customer: 'Adventure Works', total: '$76.20', status: 'Shipped' },\n ],\n ),\n ]),\n ],\n [TemplateSlotName.Secondary]: [\n widget('widget-activity', 'Activity', [externalComponent('activity-timeline', 'timeline', { align: 'left' })]),\n widget('widget-capacity', 'Warehouse capacity', [externalComponent('capacity-bar', 'progressBar', { value: 68 })]),\n ],\n },\n displayName: 'Dashboard',\n description: 'Four stat cards over two columns of widgets - the composition every template line opens with.',\n metadata: { ...sakaiCompositionProvenance },\n};\n\n/** The list: a filter toolbar, a real table, and the row actions a list needs. */\nexport const crudListTemplate: ScreenTemplate = {\n name: 'CrudList',\n fitsSlot: SlotName.Content,\n slots: [{ name: TemplateSlotName.Toolbar }, { name: TemplateSlotName.Body }],\n content: {\n [TemplateSlotName.Toolbar]: [\n pageHeader('crud-header', 'Products', '412 products across 9 categories', [\n button('crud-new', 'New product', { severity: 'primary', icon: 'pi pi-plus' }),\n button('crud-import', 'Import', { severity: 'secondary', icon: 'pi pi-upload' }),\n ]),\n externalComponent('crud-search', 'inputText', { placeholder: 'Search products', ariaLabel: 'Search products' }),\n ],\n [TemplateSlotName.Body]: [\n table(\n 'products-table',\n [\n { field: 'code', header: 'Code' },\n { field: 'name', header: 'Name' },\n { field: 'category', header: 'Category' },\n { field: 'price', header: 'Price' },\n { field: 'stock', header: 'In stock' },\n ],\n [\n { code: 'P-1001', name: 'Bamboo Watch', category: 'Accessories', price: '$65.00', stock: 24 },\n { code: 'P-1002', name: 'Black Watch', category: 'Accessories', price: '$72.00', stock: 61 },\n { code: 'P-1003', name: 'Blue Band', category: 'Fitness', price: '$79.00', stock: 2 },\n { code: 'P-1004', name: 'Blue T-Shirt', category: 'Clothing', price: '$29.00', stock: 25 },\n { code: 'P-1005', name: 'Bracelet', category: 'Accessories', price: '$15.00', stock: 73 },\n ],\n ),\n ],\n },\n displayName: 'List',\n description: 'A searchable table with a header, primary action and row data.',\n metadata: { ...defaultBlueprintTemplateProvenance },\n};\n\n/** The detail: a summary panel beside the record's own sections. */\nexport const detailViewTemplate: ScreenTemplate = {\n name: 'DetailView',\n fitsSlot: SlotName.Content,\n slots: [{ name: TemplateSlotName.Header }, { name: TemplateSlotName.Body }, { name: TemplateSlotName.SidePanel }],\n content: {\n [TemplateSlotName.Header]: [\n pageHeader('detail-header', 'Bamboo Watch', 'P-1001 · Accessories', [\n button('detail-edit', 'Edit', { severity: 'primary', icon: 'pi pi-pencil' }),\n button('detail-archive', 'Archive', { severity: 'secondary', icon: 'pi pi-inbox' }),\n ]),\n ],\n [TemplateSlotName.Body]: [\n widget('detail-description', 'Description', [\n text('detail-description-text', 'A bamboo-cased watch with a sapphire face and a recycled steel strap.'),\n ]),\n widget('detail-history', 'Price history', [externalComponent('detail-history-timeline', 'timeline', { align: 'left' })]),\n ],\n [TemplateSlotName.SidePanel]: [\n widget('detail-summary', 'Summary', [\n text('detail-stock', 'In stock: 24'),\n text('detail-reserved', 'Reserved: 3'),\n externalComponent('detail-status', 'tag', { value: 'Active', severity: 'success' }),\n ]),\n ],\n },\n displayName: 'Detail',\n description: 'One record: a header with actions, its sections, and a summary panel.',\n metadata: { ...defaultBlueprintTemplateProvenance },\n};\n\n/**\n * Master/detail: the list and the selected record side by side, so working through records does not mean\n * leaving the list. The detail region is an outlet that accepts detail screens, which is what lets a row's\n * destination open a full detail screen in place.\n *\n * At a compact width the two stack, list first, because side-by-side on a phone is two unreadable halves.\n */\nexport const masterDetailTemplate: ScreenTemplate = {\n name: 'MasterDetail',\n fitsSlot: SlotName.Content,\n slots: [{ name: TemplateSlotName.Header }, { name: TemplateSlotName.Primary }, { name: TemplateSlotName.SidePanel }],\n outlets: [{ name: 'master-detail.detail', description: 'The selected record.', accepts: ['Detail'] }],\n arrangement: {\n root: column([slotLeaf(TemplateSlotName.Header), grid([slotLeaf(TemplateSlotName.Primary), slotLeaf(TemplateSlotName.SidePanel)], 2, 16)], 16),\n overrides: [\n {\n width: WidthSizeClass.Compact,\n root: column([slotLeaf(TemplateSlotName.Header), slotLeaf(TemplateSlotName.Primary), slotLeaf(TemplateSlotName.SidePanel)], 16),\n },\n ],\n },\n content: {\n [TemplateSlotName.Header]: [pageHeader('master-header', 'Customers', '1,204 customers, 38 with overdue invoices')],\n [TemplateSlotName.Primary]: [\n table(\n 'customers-table',\n [\n { field: 'name', header: 'Customer' },\n { field: 'city', header: 'City' },\n { field: 'balance', header: 'Balance' },\n ],\n [\n { name: 'Northwind Traders', city: 'Seattle', balance: '$4,200.00' },\n { name: 'Contoso Ltd', city: 'Oslo', balance: '$0.00' },\n { name: 'Fabrikam', city: 'Lyon', balance: '$12,940.50' },\n { name: 'Adventure Works', city: 'Denver', balance: '$318.20' },\n ],\n 'No customers match the search',\n ),\n ],\n [TemplateSlotName.SidePanel]: [\n widget('customer-detail', 'Northwind Traders', [\n text('customer-contact', 'Contact: Amelia Nyquist'),\n text('customer-terms', 'Payment terms: 30 days'),\n externalComponent('customer-status', 'tag', { value: 'Overdue', severity: 'warning' }),\n button('customer-open', 'Open customer', { severity: 'primary' }),\n ]),\n ],\n },\n displayName: 'Master/detail',\n description: 'A list beside the selected record, stacking on narrow screens.',\n metadata: { ...defaultBlueprintTemplateProvenance, type: 'Workspace' },\n};\n\n/** The form: fields, grouped, with the actions that close them. */\nexport const formPageTemplate: ScreenTemplate = {\n name: 'FormPage',\n fitsSlot: SlotName.Content,\n slots: [{ name: TemplateSlotName.Header }, { name: TemplateSlotName.Body }, { name: TemplateSlotName.Actions }],\n content: {\n [TemplateSlotName.Header]: [pageHeader('form-header', 'New product', 'Everything marked with an asterisk is required')],\n [TemplateSlotName.Body]: [\n card('form-card', [\n field('form-name', 'Name', 'inputText', { placeholder: 'Bamboo Watch' }),\n field('form-code', 'Code', 'inputText', { placeholder: 'P-1001' }),\n field('form-category', 'Category', 'dropdown', { options: ['Accessories', 'Clothing', 'Fitness'] }),\n field('form-price', 'Price', 'inputNumber', { mode: 'currency', currency: 'USD' }),\n field('form-available', 'Available from', 'calendar', {}),\n field('form-notes', 'Notes', 'inputTextarea', { rows: 4 }),\n ]),\n ],\n [TemplateSlotName.Actions]: [formActions('form-actions', 'Create product')],\n },\n displayName: 'Form',\n description: 'A grouped form with the field types an application actually uses.',\n metadata: { ...defaultBlueprintTemplateProvenance },\n};\n\n/** The empty state: what a list looks like before anything exists, designed rather than apologized for. */\nexport const emptyTemplate: ScreenTemplate = {\n name: 'Empty',\n fitsSlot: SlotName.Content,\n slots: [{ name: TemplateSlotName.Body }],\n content: {\n [TemplateSlotName.Body]: [\n emptyState('empty-state', 'No products yet', 'Products you create will show up here, with their stock and pricing.', 'Create the first product'),\n ],\n },\n displayName: 'Empty state',\n description: 'The designed empty state for a list that has nothing in it yet.',\n metadata: { ...defaultBlueprintTemplateProvenance },\n};\n\n/** The five workspace templates. */\nexport const workspaceTemplates: ScreenTemplate[] = [dashboardTemplate, crudListTemplate, masterDetailTemplate, detailViewTemplate, formPageTemplate, emptyTemplate];\n"],"names":["dashboardTemplate","name","fitsSlot","SlotName","Content","slots","TemplateSlotName","Stats","Primary","Secondary","arrangement","root","column","slotLeaf","grid","span","overrides","width","WidthSizeClass","Compact","content","statCard","widget","table","field","header","month","revenue","change","reference","customer","total","status","externalComponent","align","value","displayName","description","metadata","sakaiCompositionProvenance","crudListTemplate","Toolbar","Body","pageHeader","button","severity","icon","placeholder","ariaLabel","code","category","price","stock","defaultBlueprintTemplateProvenance","detailViewTemplate","Header","SidePanel","text","masterDetailTemplate","outlets","accepts","city","balance","type","formPageTemplate","Actions","card","options","mode","currency","rows","formActions","emptyTemplate","emptyState","workspaceTemplates"],"mappings":"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"}
@@ -7,4 +7,5 @@ export * from './shell';
7
7
  export * from './themes';
8
8
  export * from './defaultBlueprintComponents';
9
9
  export * from './defaultBlueprint';
10
+ export * from './templateProvenance';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -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,UAAU,CAAC;AACzB,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,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,UAAU,CAAC;AACzB,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
package/dist/esm/index.js CHANGED
@@ -21,7 +21,7 @@ export { entriesInGroup, navigationContributionPoint, navigationContributions, n
21
21
  export { applicationChrome, fullPageChrome } from './gallery/applicationChrome.js';
22
22
  export { composeScreenElement, nestScreenTemplates, templateContentInLayout } from './gallery/composeScreen.js';
23
23
  export { featureSectionTemplate, moduleWorkspaceTemplate, nestingChainTemplates, sliceSectionTemplate } from './gallery/nesting.js';
24
- export { crudListTemplate, dashboardTemplate, detailViewTemplate, emptyTemplate, formPageTemplate, workspaceTemplates } from './gallery/workspaceTemplates.js';
24
+ export { crudListTemplate, dashboardTemplate, detailViewTemplate, emptyTemplate, formPageTemplate, masterDetailTemplate, workspaceTemplates } from './gallery/workspaceTemplates.js';
25
25
  export { documentationTemplate, helpTemplate, invoiceTemplate, profileSettingsTemplate, supportTemplates, userManagementTemplate } from './gallery/supportTemplates.js';
26
26
  export { authTemplates, forgotPasswordTemplate, lockScreenTemplate, loginTemplate, newPasswordTemplate, registerTemplate, verificationTemplate } from './gallery/authTemplates.js';
27
27
  export { accessDeniedTemplate, errorTemplate, landingTemplate, notFoundTemplate, statusTemplates } from './gallery/statusTemplates.js';
@@ -32,6 +32,8 @@ export { componentNamesIn, distinctComponentNames } from './gallery/componentNam
32
32
  export { galleryComponentCatalog, galleryPreviewProfile, galleryProfile } from './gallery/previewProfile.js';
33
33
  export { resolveElementComponentNames } from './gallery/resolveElementNames.js';
34
34
  export { GalleryScreenPreview, galleryPreviewRegistry } from './gallery/GalleryScreenPreview.js';
35
+ export { TemplatePreviewState } from './gallery/TemplatePreviewState.js';
36
+ export { applyTemplatePreviewState, hasPreviewData, previewErrorMessage } from './gallery/applyTemplatePreviewState.js';
35
37
  export { readBoolean, readNumber, readOptionalString, readRecords, readString, readStrings, recordString } from './shell/elementProperties.js';
36
38
  export { readThemeOptions, themeOptionsFor } from './shell/ThemeOption.js';
37
39
  export { AppShell } from './shell/AppShell.js';
@@ -57,4 +59,5 @@ export { defaultBlueprintThemes } from './themes/defaultBlueprintThemes.js';
57
59
  export { LayoutThemeProvider } from './themes/LayoutThemeProvider.js';
58
60
  export { defaultBlueprintComponents } from './defaultBlueprintComponents.js';
59
61
  export { defaultBlueprint, defaultBlueprintManifest } from './defaultBlueprint.js';
62
+ export { defaultBlueprintTemplateProvenance, sakaiCompositionProvenance } from './templateProvenance.js';
60
63
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"appShell.d.ts","sourceRoot":"","sources":["../../../layouts/appShell.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAmB,MAAM,EAAkB,MAAM,qBAAqB,CAAC;AAS/F,eAAO,MAAM,mBAAmB,0CAY9B,CAAC;AASH,eAAO,MAAM,wBAAwB,0CAInC,CAAC;AASH,eAAO,MAAM,yBAAyB,0CAQpC,CAAC;AAUH,eAAO,MAAM,mBAAmB,0CAI9B,CAAC;AAGH,eAAO,MAAM,mBAAmB,EAAE,eAOjC,CAAC;AAcF,eAAO,MAAM,cAAc,EAAE,MAa5B,CAAC"}
1
+ {"version":3,"file":"appShell.d.ts","sourceRoot":"","sources":["../../../layouts/appShell.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAmB,MAAM,EAAkB,MAAM,qBAAqB,CAAC;AAU/F,eAAO,MAAM,mBAAmB,0CAY9B,CAAC;AASH,eAAO,MAAM,wBAAwB,0CAInC,CAAC;AASH,eAAO,MAAM,yBAAyB,0CAQpC,CAAC;AAUH,eAAO,MAAM,mBAAmB,0CAI9B,CAAC;AAGH,eAAO,MAAM,mBAAmB,EAAE,eAOjC,CAAC;AAcF,eAAO,MAAM,cAAc,EAAE,MAc5B,CAAC"}
@@ -2,6 +2,7 @@ import { WidthSizeClass, HeightSizeClass } from '@cratis/scene.model';
2
2
  import { LayoutName } from './LayoutName.js';
3
3
  import { SlotName } from './SlotName.js';
4
4
  import { column, slotLeaf, row } from './flowBuilders.js';
5
+ import { sakaiCompositionProvenance } from '../templateProvenance.js';
5
6
 
6
7
  // Copyright (c) Cratis. All rights reserved.
7
8
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
@@ -146,7 +147,10 @@ import { column, slotLeaf, row } from './flowBuilders.js';
146
147
  name: SlotName.ConfigPanel
147
148
  }
148
149
  ],
149
- arrangement: appShellArrangement
150
+ arrangement: appShellArrangement,
151
+ metadata: {
152
+ ...sakaiCompositionProvenance
153
+ }
150
154
  };
151
155
 
152
156
  export { appShellArrangement, appShellCompactHeightRoot, appShellCompactRoot, appShellCompactWidthRoot, appShellLayout, appShellRegularRoot };
@@ -1 +1 @@
1
- {"version":3,"file":"appShell.js","sources":["../../../layouts/appShell.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 { FlowArrangement, HeightSizeClass, Layout, WidthSizeClass } from '@cratis/scene.model';\nimport { LayoutName } from './LayoutName';\nimport { SlotName } from './SlotName';\nimport { column, row, slotLeaf } from './flowBuilders';\n\n/**\n * The tree at a regular width and height: a topbar across the top, the sidebar column beside the main\n * column, an optional right panel down the edge, and the configurator floating over all of it.\n */\nexport const appShellRegularRoot = column([\n slotLeaf(SlotName.Topbar),\n row(\n [\n column([slotLeaf(SlotName.Sidebar), slotLeaf(SlotName.Menu, { grow: 1 })]),\n column([slotLeaf(SlotName.Breadcrumb), slotLeaf(SlotName.Content, { grow: 1 }), slotLeaf(SlotName.Footer)], 0, { grow: 1 }),\n slotLeaf(SlotName.RightPanel),\n ],\n 0,\n { grow: 1 },\n ),\n slotLeaf(SlotName.ConfigPanel),\n]);\n\n/**\n * The tree at a compact width: the sidebar and the right panel leave the flow entirely.\n *\n * They leave rather than shrink because there is no width at which an 18rem panel and a 20rem panel both\n * fit beside content on a phone. The sidebar is still rendered - off-canvas, over the content, behind the\n * mask - but it no longer *occupies* anything, and that is a fact about the arrangement, not about CSS.\n */\nexport const appShellCompactWidthRoot = column([\n slotLeaf(SlotName.Topbar),\n column([slotLeaf(SlotName.Breadcrumb), slotLeaf(SlotName.Content, { grow: 1 }), slotLeaf(SlotName.Footer)], 0, { grow: 1 }),\n slotLeaf(SlotName.ConfigPanel),\n]);\n\n/**\n * The tree at a compact height: the breadcrumb and the footer go.\n *\n * A landscape phone has room across but almost none down, and two horizontal strips of chrome eat most of\n * what is left. Dropping them is the height axis earning its place in the size-class matrix - width alone\n * cannot express it.\n */\nexport const appShellCompactHeightRoot = column([\n slotLeaf(SlotName.Topbar),\n row(\n [column([slotLeaf(SlotName.Sidebar), slotLeaf(SlotName.Menu, { grow: 1 })]), slotLeaf(SlotName.Content, { grow: 1 }), slotLeaf(SlotName.RightPanel)],\n 0,\n { grow: 1 },\n ),\n slotLeaf(SlotName.ConfigPanel),\n]);\n\n/**\n * The tree when both axes are compact - a phone in landscape: nothing but the topbar, the content and the\n * configurator.\n *\n * This override exists to be *more specific* than the two single-axis ones. `evaluateFlowArrangement`\n * scores an override by how many axes it targets, so without this one a landscape phone would pick\n * whichever single-axis override was declared last and keep a footer it has no room for.\n */\nexport const appShellCompactRoot = column([\n slotLeaf(SlotName.Topbar),\n slotLeaf(SlotName.Content, { grow: 1 }),\n slotLeaf(SlotName.ConfigPanel),\n]);\n\n/** The arrangement of the {@link appShellLayout}'s own slots, with one override per size-class combination that changes it. */\nexport const appShellArrangement: FlowArrangement = {\n root: appShellRegularRoot,\n overrides: [\n { width: WidthSizeClass.Compact, root: appShellCompactWidthRoot },\n { height: HeightSizeClass.Compact, root: appShellCompactHeightRoot },\n { width: WidthSizeClass.Compact, height: HeightSizeClass.Compact, root: appShellCompactRoot },\n ],\n};\n\n/**\n * The application shell layout.\n *\n * This is the *application-level* structure - the base navigational look an application picks once and\n * every page then lives inside. The regions are the ones PrimeTek's template line settled on: Sakai\n * establishes topbar, sidebar, menu, content and footer, and the premium templates add the breadcrumb and\n * the right panel. Both sets are here, because a layout package covering only the free template's regions\n * forces a fork on anyone who wants the others.\n *\n * The slots carry no arrangement of their own: how a screen's content is arranged *inside* a slot is that\n * page template's business, and a layout that dictated it would stop being a shell.\n */\nexport const appShellLayout: Layout = {\n name: LayoutName.AppShell,\n slots: [\n { name: SlotName.Topbar },\n { name: SlotName.Sidebar },\n { name: SlotName.Menu },\n { name: SlotName.Breadcrumb },\n { name: SlotName.Content },\n { name: SlotName.Footer },\n { name: SlotName.RightPanel },\n { name: SlotName.ConfigPanel },\n ],\n arrangement: appShellArrangement,\n};\n"],"names":["appShellRegularRoot","column","slotLeaf","SlotName","Topbar","row","Sidebar","Menu","grow","Breadcrumb","Content","Footer","RightPanel","ConfigPanel","appShellCompactWidthRoot","appShellCompactHeightRoot","appShellCompactRoot","appShellArrangement","root","overrides","width","WidthSizeClass","Compact","height","HeightSizeClass","appShellLayout","name","LayoutName","AppShell","slots","arrangement"],"mappings":"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"}
1
+ {"version":3,"file":"appShell.js","sources":["../../../layouts/appShell.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 { FlowArrangement, HeightSizeClass, Layout, WidthSizeClass } from '@cratis/scene.model';\nimport { LayoutName } from './LayoutName';\nimport { SlotName } from './SlotName';\nimport { column, row, slotLeaf } from './flowBuilders';\nimport { sakaiCompositionProvenance } from '../templateProvenance';\n\n/**\n * The tree at a regular width and height: a topbar across the top, the sidebar column beside the main\n * column, an optional right panel down the edge, and the configurator floating over all of it.\n */\nexport const appShellRegularRoot = column([\n slotLeaf(SlotName.Topbar),\n row(\n [\n column([slotLeaf(SlotName.Sidebar), slotLeaf(SlotName.Menu, { grow: 1 })]),\n column([slotLeaf(SlotName.Breadcrumb), slotLeaf(SlotName.Content, { grow: 1 }), slotLeaf(SlotName.Footer)], 0, { grow: 1 }),\n slotLeaf(SlotName.RightPanel),\n ],\n 0,\n { grow: 1 },\n ),\n slotLeaf(SlotName.ConfigPanel),\n]);\n\n/**\n * The tree at a compact width: the sidebar and the right panel leave the flow entirely.\n *\n * They leave rather than shrink because there is no width at which an 18rem panel and a 20rem panel both\n * fit beside content on a phone. The sidebar is still rendered - off-canvas, over the content, behind the\n * mask - but it no longer *occupies* anything, and that is a fact about the arrangement, not about CSS.\n */\nexport const appShellCompactWidthRoot = column([\n slotLeaf(SlotName.Topbar),\n column([slotLeaf(SlotName.Breadcrumb), slotLeaf(SlotName.Content, { grow: 1 }), slotLeaf(SlotName.Footer)], 0, { grow: 1 }),\n slotLeaf(SlotName.ConfigPanel),\n]);\n\n/**\n * The tree at a compact height: the breadcrumb and the footer go.\n *\n * A landscape phone has room across but almost none down, and two horizontal strips of chrome eat most of\n * what is left. Dropping them is the height axis earning its place in the size-class matrix - width alone\n * cannot express it.\n */\nexport const appShellCompactHeightRoot = column([\n slotLeaf(SlotName.Topbar),\n row(\n [column([slotLeaf(SlotName.Sidebar), slotLeaf(SlotName.Menu, { grow: 1 })]), slotLeaf(SlotName.Content, { grow: 1 }), slotLeaf(SlotName.RightPanel)],\n 0,\n { grow: 1 },\n ),\n slotLeaf(SlotName.ConfigPanel),\n]);\n\n/**\n * The tree when both axes are compact - a phone in landscape: nothing but the topbar, the content and the\n * configurator.\n *\n * This override exists to be *more specific* than the two single-axis ones. `evaluateFlowArrangement`\n * scores an override by how many axes it targets, so without this one a landscape phone would pick\n * whichever single-axis override was declared last and keep a footer it has no room for.\n */\nexport const appShellCompactRoot = column([\n slotLeaf(SlotName.Topbar),\n slotLeaf(SlotName.Content, { grow: 1 }),\n slotLeaf(SlotName.ConfigPanel),\n]);\n\n/** The arrangement of the {@link appShellLayout}'s own slots, with one override per size-class combination that changes it. */\nexport const appShellArrangement: FlowArrangement = {\n root: appShellRegularRoot,\n overrides: [\n { width: WidthSizeClass.Compact, root: appShellCompactWidthRoot },\n { height: HeightSizeClass.Compact, root: appShellCompactHeightRoot },\n { width: WidthSizeClass.Compact, height: HeightSizeClass.Compact, root: appShellCompactRoot },\n ],\n};\n\n/**\n * The application shell layout.\n *\n * This is the *application-level* structure - the base navigational look an application picks once and\n * every page then lives inside. The regions are the ones PrimeTek's template line settled on: Sakai\n * establishes topbar, sidebar, menu, content and footer, and the premium templates add the breadcrumb and\n * the right panel. Both sets are here, because a layout package covering only the free template's regions\n * forces a fork on anyone who wants the others.\n *\n * The slots carry no arrangement of their own: how a screen's content is arranged *inside* a slot is that\n * page template's business, and a layout that dictated it would stop being a shell.\n */\nexport const appShellLayout: Layout = {\n name: LayoutName.AppShell,\n slots: [\n { name: SlotName.Topbar },\n { name: SlotName.Sidebar },\n { name: SlotName.Menu },\n { name: SlotName.Breadcrumb },\n { name: SlotName.Content },\n { name: SlotName.Footer },\n { name: SlotName.RightPanel },\n { name: SlotName.ConfigPanel },\n ],\n arrangement: appShellArrangement,\n metadata: { ...sakaiCompositionProvenance },\n};\n"],"names":["appShellRegularRoot","column","slotLeaf","SlotName","Topbar","row","Sidebar","Menu","grow","Breadcrumb","Content","Footer","RightPanel","ConfigPanel","appShellCompactWidthRoot","appShellCompactHeightRoot","appShellCompactRoot","appShellArrangement","root","overrides","width","WidthSizeClass","Compact","height","HeightSizeClass","appShellLayout","name","LayoutName","AppShell","slots","arrangement","metadata","sakaiCompositionProvenance"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fullPage.d.ts","sourceRoot":"","sources":["../../../layouts/fullPage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAkB,MAAM,qBAAqB,CAAC;AAW9E,eAAO,MAAM,mBAAmB,0CAAqI,CAAC;AAStK,eAAO,MAAM,wBAAwB,0CAAoF,CAAC;AAG1H,eAAO,MAAM,mBAAmB,EAAE,eAGjC,CAAC;AAcF,eAAO,MAAM,cAAc,EAAE,MAI5B,CAAC"}
1
+ {"version":3,"file":"fullPage.d.ts","sourceRoot":"","sources":["../../../layouts/fullPage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAkB,MAAM,qBAAqB,CAAC;AAY9E,eAAO,MAAM,mBAAmB,0CAAqI,CAAC;AAStK,eAAO,MAAM,wBAAwB,0CAAoF,CAAC;AAG1H,eAAO,MAAM,mBAAmB,EAAE,eAGjC,CAAC;AAcF,eAAO,MAAM,cAAc,EAAE,MAK5B,CAAC"}
@@ -2,6 +2,7 @@ import { WidthSizeClass } from '@cratis/scene.model';
2
2
  import { LayoutName } from './LayoutName.js';
3
3
  import { SlotName } from './SlotName.js';
4
4
  import { column, row, slotLeaf } from './flowBuilders.js';
5
+ import { defaultBlueprintTemplateProvenance } from '../templateProvenance.js';
5
6
 
6
7
  // Copyright (c) Cratis. All rights reserved.
7
8
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
@@ -66,7 +67,10 @@ import { column, row, slotLeaf } from './flowBuilders.js';
66
67
  name: SlotName.ConfigPanel
67
68
  }
68
69
  ],
69
- arrangement: fullPageArrangement
70
+ arrangement: fullPageArrangement,
71
+ metadata: {
72
+ ...defaultBlueprintTemplateProvenance
73
+ }
70
74
  };
71
75
 
72
76
  export { fullPageArrangement, fullPageCompactWidthRoot, fullPageLayout, fullPageRegularRoot };
@@ -1 +1 @@
1
- {"version":3,"file":"fullPage.js","sources":["../../../layouts/fullPage.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 { FlowArrangement, Layout, WidthSizeClass } from '@cratis/scene.model';\nimport { LayoutName } from './LayoutName';\nimport { SlotName } from './SlotName';\nimport { column, row, slotLeaf } from './flowBuilders';\n\n/**\n * The tree at a regular width: the branding aside beside the content, with the configurator over both.\n *\n * The split is the shape every premium PrimeTek sign-in page uses - a colored branding half and a form\n * half - and it is the reason `aside` is a slot rather than something a screen paints inside `content`.\n */\nexport const fullPageRegularRoot = column([row([slotLeaf(SlotName.Aside), slotLeaf(SlotName.Content, { grow: 1 })], 0, { grow: 1 }), slotLeaf(SlotName.ConfigPanel)]);\n\n/**\n * The tree at a compact width: the branding aside leaves the flow.\n *\n * On a phone the aside would take 40% of the width from the only thing that matters on a sign-in screen,\n * which is the form. It drops out rather than stacking above it, because a sign-in form pushed below the\n * fold by decoration is the worst possible first screen.\n */\nexport const fullPageCompactWidthRoot = column([slotLeaf(SlotName.Content, { grow: 1 }), slotLeaf(SlotName.ConfigPanel)]);\n\n/** The arrangement of the {@link fullPageLayout}'s own slots. */\nexport const fullPageArrangement: FlowArrangement = {\n root: fullPageRegularRoot,\n overrides: [{ width: WidthSizeClass.Compact, root: fullPageCompactWidthRoot }],\n};\n\n/**\n * The chrome-less layout.\n *\n * Sign-in, register, forgotten password, verification, lock, error, access-denied, not-found and landing\n * screens all use this rather than a stripped-down application shell, and that split is structural in\n * every PrimeTek template for a reason worth repeating: none of those screens has navigation state, a\n * sidebar to remember or a breadcrumb to place, so hanging them off the application shell would mean every\n * one of the eight modes needs an answer for a page with no menu.\n *\n * The configurator stays, because the sign-in page is very often the first page anyone sees and it still\n * has to honor the chosen theme.\n */\nexport const fullPageLayout: Layout = {\n name: LayoutName.FullPage,\n slots: [{ name: SlotName.Aside }, { name: SlotName.Content }, { name: SlotName.ConfigPanel }],\n arrangement: fullPageArrangement,\n};\n"],"names":["fullPageRegularRoot","column","row","slotLeaf","SlotName","Aside","Content","grow","ConfigPanel","fullPageCompactWidthRoot","fullPageArrangement","root","overrides","width","WidthSizeClass","Compact","fullPageLayout","name","LayoutName","FullPage","slots","arrangement"],"mappings":";;;;;AAAA;AACA;AAOA;;;;;IAMO,MAAMA,mBAAAA,GAAsBC,MAAAA,CAAO;IAACC,GAAAA,CAAI;AAACC,QAAAA,QAAAA,CAASC,SAASC,KAAK,CAAA;QAAGF,QAAAA,CAASC,QAAAA,CAASE,OAAO,EAAE;YAAEC,IAAAA,EAAM;AAAE,SAAA;AAAG,KAAA,EAAE,CAAA,EAAG;QAAEA,IAAAA,EAAM;AAAE,KAAA,CAAA;AAAIJ,IAAAA,QAAAA,CAASC,SAASI,WAAW;CAAE;AAEpK;;;;;;IAOO,MAAMC,wBAAAA,GAA2BR,MAAAA,CAAO;IAACE,QAAAA,CAASC,QAAAA,CAASE,OAAO,EAAE;QAAEC,IAAAA,EAAM;AAAE,KAAA,CAAA;AAAIJ,IAAAA,QAAAA,CAASC,SAASI,WAAW;CAAE;AAExH,kEACO,MAAME,mBAAAA,GAAuC;IAChDC,IAAAA,EAAMX,mBAAAA;IACNY,SAAAA,EAAW;AAAC,QAAA;AAAEC,YAAAA,KAAAA,EAAOC,eAAeC,OAAO;YAAEJ,IAAAA,EAAMF;AAAyB;AAAE;AAClF;AAEA;;;;;;;;;;;UAYaO,cAAAA,GAAyB;AAClCC,IAAAA,IAAAA,EAAMC,WAAWC,QAAQ;IACzBC,KAAAA,EAAO;AAAC,QAAA;AAAEH,YAAAA,IAAAA,EAAMb,SAASC;AAAM,SAAA;AAAG,QAAA;AAAEY,YAAAA,IAAAA,EAAMb,SAASE;AAAQ,SAAA;AAAG,QAAA;AAAEW,YAAAA,IAAAA,EAAMb,SAASI;AAAY;AAAE,KAAA;IAC7Fa,WAAAA,EAAaX;AACjB;;"}
1
+ {"version":3,"file":"fullPage.js","sources":["../../../layouts/fullPage.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 { FlowArrangement, Layout, WidthSizeClass } from '@cratis/scene.model';\nimport { LayoutName } from './LayoutName';\nimport { SlotName } from './SlotName';\nimport { column, row, slotLeaf } from './flowBuilders';\nimport { defaultBlueprintTemplateProvenance } from '../templateProvenance';\n\n/**\n * The tree at a regular width: the branding aside beside the content, with the configurator over both.\n *\n * The split is the shape every premium PrimeTek sign-in page uses - a colored branding half and a form\n * half - and it is the reason `aside` is a slot rather than something a screen paints inside `content`.\n */\nexport const fullPageRegularRoot = column([row([slotLeaf(SlotName.Aside), slotLeaf(SlotName.Content, { grow: 1 })], 0, { grow: 1 }), slotLeaf(SlotName.ConfigPanel)]);\n\n/**\n * The tree at a compact width: the branding aside leaves the flow.\n *\n * On a phone the aside would take 40% of the width from the only thing that matters on a sign-in screen,\n * which is the form. It drops out rather than stacking above it, because a sign-in form pushed below the\n * fold by decoration is the worst possible first screen.\n */\nexport const fullPageCompactWidthRoot = column([slotLeaf(SlotName.Content, { grow: 1 }), slotLeaf(SlotName.ConfigPanel)]);\n\n/** The arrangement of the {@link fullPageLayout}'s own slots. */\nexport const fullPageArrangement: FlowArrangement = {\n root: fullPageRegularRoot,\n overrides: [{ width: WidthSizeClass.Compact, root: fullPageCompactWidthRoot }],\n};\n\n/**\n * The chrome-less layout.\n *\n * Sign-in, register, forgotten password, verification, lock, error, access-denied, not-found and landing\n * screens all use this rather than a stripped-down application shell, and that split is structural in\n * every PrimeTek template for a reason worth repeating: none of those screens has navigation state, a\n * sidebar to remember or a breadcrumb to place, so hanging them off the application shell would mean every\n * one of the eight modes needs an answer for a page with no menu.\n *\n * The configurator stays, because the sign-in page is very often the first page anyone sees and it still\n * has to honor the chosen theme.\n */\nexport const fullPageLayout: Layout = {\n name: LayoutName.FullPage,\n slots: [{ name: SlotName.Aside }, { name: SlotName.Content }, { name: SlotName.ConfigPanel }],\n arrangement: fullPageArrangement,\n metadata: { ...defaultBlueprintTemplateProvenance },\n};\n"],"names":["fullPageRegularRoot","column","row","slotLeaf","SlotName","Aside","Content","grow","ConfigPanel","fullPageCompactWidthRoot","fullPageArrangement","root","overrides","width","WidthSizeClass","Compact","fullPageLayout","name","LayoutName","FullPage","slots","arrangement","metadata","defaultBlueprintTemplateProvenance"],"mappings":";;;;;;AAAA;AACA;AAQA;;;;;IAMO,MAAMA,mBAAAA,GAAsBC,MAAAA,CAAO;IAACC,GAAAA,CAAI;AAACC,QAAAA,QAAAA,CAASC,SAASC,KAAK,CAAA;QAAGF,QAAAA,CAASC,QAAAA,CAASE,OAAO,EAAE;YAAEC,IAAAA,EAAM;AAAE,SAAA;AAAG,KAAA,EAAE,CAAA,EAAG;QAAEA,IAAAA,EAAM;AAAE,KAAA,CAAA;AAAIJ,IAAAA,QAAAA,CAASC,SAASI,WAAW;CAAE;AAEpK;;;;;;IAOO,MAAMC,wBAAAA,GAA2BR,MAAAA,CAAO;IAACE,QAAAA,CAASC,QAAAA,CAASE,OAAO,EAAE;QAAEC,IAAAA,EAAM;AAAE,KAAA,CAAA;AAAIJ,IAAAA,QAAAA,CAASC,SAASI,WAAW;CAAE;AAExH,kEACO,MAAME,mBAAAA,GAAuC;IAChDC,IAAAA,EAAMX,mBAAAA;IACNY,SAAAA,EAAW;AAAC,QAAA;AAAEC,YAAAA,KAAAA,EAAOC,eAAeC,OAAO;YAAEJ,IAAAA,EAAMF;AAAyB;AAAE;AAClF;AAEA;;;;;;;;;;;UAYaO,cAAAA,GAAyB;AAClCC,IAAAA,IAAAA,EAAMC,WAAWC,QAAQ;IACzBC,KAAAA,EAAO;AAAC,QAAA;AAAEH,YAAAA,IAAAA,EAAMb,SAASC;AAAM,SAAA;AAAG,QAAA;AAAEY,YAAAA,IAAAA,EAAMb,SAASE;AAAQ,SAAA;AAAG,QAAA;AAAEW,YAAAA,IAAAA,EAAMb,SAASI;AAAY;AAAE,KAAA;IAC7Fa,WAAAA,EAAaX,mBAAAA;IACbY,QAAAA,EAAU;AAAE,QAAA,GAAGC;AAAmC;AACtD;;"}
@@ -0,0 +1,4 @@
1
+ import { TemplateMetadata } from '@cratis/scene.model';
2
+ export declare const defaultBlueprintTemplateProvenance: Pick<TemplateMetadata, 'compatibility' | 'attribution' | 'license' | 'licenseUrl'>;
3
+ export declare const sakaiCompositionProvenance: Pick<TemplateMetadata, 'compatibility' | 'attribution' | 'license' | 'licenseUrl'>;
4
+ //# sourceMappingURL=templateProvenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templateProvenance.d.ts","sourceRoot":"","sources":["../../templateProvenance.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAUvD,eAAO,MAAM,kCAAkC,EAAE,IAAI,CAAC,gBAAgB,EAAE,eAAe,GAAG,aAAa,GAAG,SAAS,GAAG,YAAY,CAWjI,CAAC;AAMF,eAAO,MAAM,0BAA0B,EAAE,IAAI,CAAC,gBAAgB,EAAE,eAAe,GAAG,aAAa,GAAG,SAAS,GAAG,YAAY,CAMzH,CAAC"}
@@ -0,0 +1,43 @@
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 compatibility, attribution and license metadata every template this blueprint ships carries.
5
+ *
6
+ * Templates are written against the Scene model that introduced template provenance, and against the
7
+ * PrimeReact and Cratis Components packages this blueprint depends on - the same dependencies its manifest
8
+ * declares, with the ranges the templates were verified against. `describeTemplateCatalog` checks every
9
+ * template against them, and this package's specs prove each one comes out compatible.
10
+ */ const defaultBlueprintTemplateProvenance = {
11
+ compatibility: {
12
+ scene: '^4.13.0',
13
+ packages: [
14
+ {
15
+ name: 'PrimeReact',
16
+ versionRange: '^11.0.0'
17
+ },
18
+ {
19
+ name: 'Cratis.Components',
20
+ versionRange: '^3.0.0'
21
+ }
22
+ ]
23
+ },
24
+ attribution: {
25
+ author: 'Cratis',
26
+ url: 'https://github.com/Cratis/Scene/tree/main/Source/JavaScript/blueprint.default'
27
+ },
28
+ license: 'MIT',
29
+ licenseUrl: 'https://github.com/Cratis/Scene/blob/main/LICENSE'
30
+ };
31
+ /**
32
+ * The provenance of the shell and the dashboard, whose arrangement follows PrimeTek's free Sakai template.
33
+ * The arrangement is followed; no Sakai source or asset is part of this package.
34
+ */ const sakaiCompositionProvenance = {
35
+ ...defaultBlueprintTemplateProvenance,
36
+ attribution: {
37
+ ...defaultBlueprintTemplateProvenance.attribution,
38
+ notice: "Arrangement follows PrimeTek's Sakai React template (https://github.com/primefaces/sakai-react, MIT)."
39
+ }
40
+ };
41
+
42
+ export { defaultBlueprintTemplateProvenance, sakaiCompositionProvenance };
43
+ //# sourceMappingURL=templateProvenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templateProvenance.js","sources":["../../templateProvenance.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 { TemplateMetadata } from '@cratis/scene.model';\n\n/**\n * The compatibility, attribution and license metadata every template this blueprint ships carries.\n *\n * Templates are written against the Scene model that introduced template provenance, and against the\n * PrimeReact and Cratis Components packages this blueprint depends on - the same dependencies its manifest\n * declares, with the ranges the templates were verified against. `describeTemplateCatalog` checks every\n * template against them, and this package's specs prove each one comes out compatible.\n */\nexport const defaultBlueprintTemplateProvenance: Pick<TemplateMetadata, 'compatibility' | 'attribution' | 'license' | 'licenseUrl'> = {\n compatibility: {\n scene: '^4.13.0',\n packages: [\n { name: 'PrimeReact', versionRange: '^11.0.0' },\n { name: 'Cratis.Components', versionRange: '^3.0.0' },\n ],\n },\n attribution: { author: 'Cratis', url: 'https://github.com/Cratis/Scene/tree/main/Source/JavaScript/blueprint.default' },\n license: 'MIT',\n licenseUrl: 'https://github.com/Cratis/Scene/blob/main/LICENSE',\n};\n\n/**\n * The provenance of the shell and the dashboard, whose arrangement follows PrimeTek's free Sakai template.\n * The arrangement is followed; no Sakai source or asset is part of this package.\n */\nexport const sakaiCompositionProvenance: Pick<TemplateMetadata, 'compatibility' | 'attribution' | 'license' | 'licenseUrl'> = {\n ...defaultBlueprintTemplateProvenance,\n attribution: {\n ...defaultBlueprintTemplateProvenance.attribution!,\n notice: \"Arrangement follows PrimeTek's Sakai React template (https://github.com/primefaces/sakai-react, MIT).\",\n },\n};\n"],"names":["defaultBlueprintTemplateProvenance","compatibility","scene","packages","name","versionRange","attribution","author","url","license","licenseUrl","sakaiCompositionProvenance","notice"],"mappings":"AAAA;AACA;AAIA;;;;;;;UAQaA,kCAAAA,GAAyH;IAClIC,aAAAA,EAAe;QACXC,KAAAA,EAAO,SAAA;QACPC,QAAAA,EAAU;AACN,YAAA;gBAAEC,IAAAA,EAAM,YAAA;gBAAcC,YAAAA,EAAc;AAAU,aAAA;AAC9C,YAAA;gBAAED,IAAAA,EAAM,mBAAA;gBAAqBC,YAAAA,EAAc;AAAS;AACvD;AACL,KAAA;IACAC,WAAAA,EAAa;QAAEC,MAAAA,EAAQ,QAAA;QAAUC,GAAAA,EAAK;AAAgF,KAAA;IACtHC,OAAAA,EAAS,KAAA;IACTC,UAAAA,EAAY;AAChB;AAEA;;;UAIaC,0BAAAA,GAAiH;AAC1H,IAAA,GAAGX,kCAAkC;IACrCM,WAAAA,EAAa;AACT,QAAA,GAAGN,mCAAmCM,WAAW;QACjDM,MAAAA,EAAQ;AACZ;AACJ;;"}