@pacem/pacem 1.0.0-bessel → 1.0.0-dirac

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 (66) hide show
  1. package/dist/browser/pacem-2d.js +149 -2
  2. package/dist/browser/pacem-2d.js.map +1 -1
  3. package/dist/browser/pacem-2d.min.js +1 -1
  4. package/dist/browser/pacem-3d.js +646 -2
  5. package/dist/browser/pacem-3d.js.map +1 -1
  6. package/dist/browser/pacem-3d.min.js +1 -1
  7. package/dist/browser/pacem-charts.js +21 -1
  8. package/dist/browser/pacem-charts.js.map +1 -1
  9. package/dist/browser/pacem-charts.min.js +1 -1
  10. package/dist/browser/pacem-cms.js +118 -3
  11. package/dist/browser/pacem-cms.js.map +1 -1
  12. package/dist/browser/pacem-cms.min.js +1 -1
  13. package/dist/browser/pacem-core.js +870 -9
  14. package/dist/browser/pacem-core.js.map +1 -1
  15. package/dist/browser/pacem-core.min.js +2 -2
  16. package/dist/browser/pacem-foundation.js +296 -1
  17. package/dist/browser/pacem-foundation.js.map +1 -1
  18. package/dist/browser/pacem-foundation.min.js +1 -1
  19. package/dist/browser/pacem-fx.js +18 -1
  20. package/dist/browser/pacem-fx.js.map +1 -1
  21. package/dist/browser/pacem-fx.min.js +1 -1
  22. package/dist/browser/pacem-logging.js +15 -1
  23. package/dist/browser/pacem-logging.js.map +1 -1
  24. package/dist/browser/pacem-logging.min.js +1 -1
  25. package/dist/browser/pacem-maps.js +97 -1
  26. package/dist/browser/pacem-maps.js.map +1 -1
  27. package/dist/browser/pacem-maps.min.js +1 -1
  28. package/dist/browser/pacem-media.js +14 -1
  29. package/dist/browser/pacem-media.js.map +1 -1
  30. package/dist/browser/pacem-media.min.js +1 -1
  31. package/dist/browser/pacem-networking.js +22 -1
  32. package/dist/browser/pacem-networking.js.map +1 -1
  33. package/dist/browser/pacem-networking.min.js +1 -1
  34. package/dist/browser/pacem-numerical.js +360 -1
  35. package/dist/browser/pacem-numerical.js.map +1 -1
  36. package/dist/browser/pacem-numerical.min.js +1 -1
  37. package/dist/browser/pacem-plus.js +195 -4
  38. package/dist/browser/pacem-plus.js.map +1 -1
  39. package/dist/browser/pacem-plus.min.js +1 -1
  40. package/dist/browser/pacem-scaffolding.js +420 -38
  41. package/dist/browser/pacem-scaffolding.js.map +1 -1
  42. package/dist/browser/pacem-scaffolding.min.js +2 -2
  43. package/dist/browser/pacem-ui.js +143 -19
  44. package/dist/browser/pacem-ui.js.map +1 -1
  45. package/dist/browser/pacem-ui.min.js +2 -2
  46. package/dist/bundle/pacem.min.mjs +147 -147
  47. package/dist/bundle/pacem.mjs +2905 -1417
  48. package/dist/bundle/pacem.mjs.map +3 -3
  49. package/dist/docs/pacem-2d.json +11549 -0
  50. package/dist/docs/pacem-3d.json +29096 -0
  51. package/dist/docs/pacem-charts.json +4244 -0
  52. package/dist/docs/pacem-cms.json +9325 -0
  53. package/dist/docs/pacem-core.json +40109 -0
  54. package/dist/docs/pacem-foundation.json +8941 -0
  55. package/dist/docs/pacem-fx.json +3121 -0
  56. package/dist/docs/pacem-logging.json +941 -0
  57. package/dist/docs/pacem-maps.json +17387 -0
  58. package/dist/docs/pacem-media.json +1203 -0
  59. package/dist/docs/pacem-networking.json +1798 -0
  60. package/dist/docs/pacem-numerical.json +13706 -0
  61. package/dist/docs/pacem-plus.json +8468 -0
  62. package/dist/docs/pacem-scaffolding.json +34788 -0
  63. package/dist/docs/pacem-ui.json +18628 -0
  64. package/dist/typings/index.d.ts +4109 -31
  65. package/dist/vscode.html-custom.json +1303 -741
  66. package/package.json +4 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-bessel (https://js.pacem.it)
2
+ * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pacem/pacem v1.0.0-bessel (https://js.pacem.it)
2
+ * @pacem/pacem v1.0.0-dirac (https://js.pacem.it)
3
3
  * Pacem (https://pacem.it)
4
4
  * Licensed under Apache-2.0
5
5
  */
@@ -33,7 +33,14 @@
33
33
  }
34
34
  }
35
35
  };
36
- /** Default metadata ('expression' field) 'type' factory. */
36
+ /**
37
+ * Default metadata ('expression' field) 'type' factory: renders a `${P}-expression` field bound to the
38
+ * given entity's `prop` attribute (or, for plain objects, the property itself), relaying value changes back
39
+ * through {@link Functions.handleExpressionValueChange} and honoring the field's `extra.selector`/`filter`/`labeler`.
40
+ * @param host The form field element requesting the markup.
41
+ * @param hostRef Binding-expression reference to `host` (defaults to `:host`).
42
+ * @param hostEntityRef Binding-expression reference to `host.entity` (defaults to `:host.entity`).
43
+ */
37
44
  const EXPRESSION_METADATA_TYPE = (host, hostRef = ':host', hostEntityRef = ':host.entity') => {
38
45
  const attrs = {}, meta = host.metadata, fns = Functions, fnKeys = [];
39
46
  attrs['value'] = `{{ ${hostEntityRef} instanceof HTMLElement && ${hostEntityRef}.getAttribute('${pacemCore.CustomElementUtils.camelToKebab(meta.prop)}') }}`;
@@ -82,6 +89,11 @@
82
89
  return c > 3 && r && Object.defineProperty(target, key, r), r;
83
90
  };
84
91
  //namespace Pacem.Components.Cms {
92
+ /**
93
+ * Base class for form fields that let the user pick an `Element` from the current document, filtered by
94
+ * `selector`/`filter` and displayed through `labeler`. See {@link PacemElementPickerElement} for the concrete
95
+ * `${P}-select`-backed implementation.
96
+ */
85
97
  class PacemElementPickerElementBase extends pacemScaffolding.Components.Scaffolding.PacemBaseElement {
86
98
  }
87
99
  __decorate$e([
@@ -93,6 +105,7 @@
93
105
  __decorate$e([
94
106
  pacemCore.Watch({ converter: pacemCore.PropertyConverters.Eval })
95
107
  ], PacemElementPickerElementBase.prototype, "labeler", void 0);
108
+ /** Form field for picking an `Element` (identified by its `id`) among those matching `selector`/`filter`, listed in a `${P}-select`. */
96
109
  let PacemElementPickerElement = class PacemElementPickerElement extends PacemElementPickerElementBase {
97
110
  get inputFields() {
98
111
  return [this._select];
@@ -169,12 +182,18 @@
169
182
  return c > 3 && r && Object.defineProperty(target, key, r), r;
170
183
  };
171
184
  //namespace Pacem.Components.Cms {
185
+ /** The kind of value a {@link PacemExpressionElement} is currently editing, as picked in its source selector. */
172
186
  var ExpressionSource;
173
187
  (function (ExpressionSource) {
174
188
  ExpressionSource["Constant"] = "const";
175
189
  ExpressionSource["PropertyReference"] = "property";
176
190
  ExpressionSource["Expression"] = "expr";
177
191
  })(ExpressionSource || (ExpressionSource = {}));
192
+ /**
193
+ * Form field for building a Pacem binding-expression string, either as a plain constant, a picked
194
+ * element/property reference (via {@link PacemElementPickerElementBase}), or a free-hand expression typed
195
+ * into an inner `${P}-textarea`; a live preview of the evaluated `value` is shown alongside the field.
196
+ */
178
197
  let PacemExpressionElement = class PacemExpressionElement extends PacemElementPickerElementBase {
179
198
  propertyChangedCallback(name, old, val, first) {
180
199
  super.propertyChangedCallback(name, old, val, first);
@@ -401,6 +420,12 @@
401
420
  const css = p.display.cssClass = pacemCore.Utils.isArray(p.display.cssClass) && p.display.cssClass || [];
402
421
  css.push(pacemCore.PCSS + '-cell');
403
422
  }
423
+ /**
424
+ * Adds the `${PCSS}-cell`/grid CSS classes to `metadata`'s display and to each of its properties' display,
425
+ * so that a generated form lays its fields out as grid cells (used for the datacolumns/fetch-parameters
426
+ * sub-grids editors, as opposed to {@link buildWidgetMetadata} which is used for a widget's own root metadata).
427
+ * @param metadata The metadata to adapt; defaults to an empty `{ props: [] }`-like metadata when omitted.
428
+ */
404
429
  function gridifyMetadata(metadata) {
405
430
  var props = metadata && metadata.props || [];
406
431
  var display = metadata && metadata.display || { name: 'Element' };
@@ -411,6 +436,11 @@
411
436
  props.forEach(cellifyMetadata);
412
437
  return { display: display, props: props };
413
438
  }
439
+ /**
440
+ * Merges `metadata` on top of {@link DEFAULT_METADATA} (the common `tag` property/display), cellifying every
441
+ * resulting property's display (see `cellifyMetadata`); used by widget constructors to build their `metadata`.
442
+ * @param metadata Widget-specific metadata to merge on top of the defaults.
443
+ */
414
444
  function buildWidgetMetadata(metadata) {
415
445
  var display = pacemCore.Utils.extend({}, DEFAULT_METADATA.display, metadata && metadata.display || {});
416
446
  var props = pacemCore.Utils.clone(DEFAULT_METADATA.props);
@@ -434,6 +464,7 @@
434
464
  return (e.metadata && e.metadata.display && e.metadata.display.name || '') + '#' + e.id;
435
465
  }
436
466
  };
467
+ /** Static lookup helper for {@link PacemWidgetElement} instances in the current document. */
437
468
  class Widget {
438
469
  /**
439
470
  * Utility method for widget gathering.
@@ -443,6 +474,7 @@
443
474
  return pacemCore.CustomElementUtils.findAll('.' + WIDGET_CSS_CLASS, (widget) => widget instanceof PacemWidgetElement && !pacemCore.Utils.isNullOrEmpty(widget.id) && (pacemCore.Utils.isNull(predicate) || predicate(widget)));
444
475
  }
445
476
  }
477
+ /** Floating toolbar (edit/permissions/remove buttons), shown by a {@link PacemWidgetElement}'s balloon while `editing`, that opens the widget's core/permissions edit forms. */
446
478
  let PacemWidgetToolbarElement = class PacemWidgetToolbarElement extends pacemCore.Components.PacemElement {
447
479
  /** Gets the toolbar's edit button. */
448
480
  get editButton() {
@@ -512,9 +544,16 @@
512
544
  </${pacemCore.P}-shell-proxy>`
513
545
  })
514
546
  ], PacemWidgetToolbarElement);
547
+ /**
548
+ * Base class for CMS widgets: assigns each instance a stable `id`, exposes an `editing`/`editable` toggle
549
+ * backed by a hover-triggered {@link PacemWidgetToolbarElement} balloon (edit/permissions/remove actions),
550
+ * and carries the `metadata`/`permissionMetadata`/`permissions` used to scaffold its editing forms. See
551
+ * {@link PacemUiWidgetElement} and {@link PacemBearerWidgetElement} for further specialized bases.
552
+ */
515
553
  class PacemWidgetElement extends pacemCore.Components.PacemElement {
516
554
  constructor(metadata, role = 'widget') {
517
555
  super(role);
556
+ /** Gets or sets the scaffolding metadata describing the widget's permission-editing form. */
518
557
  this.permissionMetadata = DEFAULT_PERMISSION_METADATA;
519
558
  this.metadata = metadata;
520
559
  }
@@ -619,6 +658,7 @@
619
658
  }
620
659
  ]
621
660
  };
661
+ /** Non-visual helper widget exposing an arbitrary `model` object, typically referenced as a data source by other widgets/expressions. */
622
662
  let PacemWidgetDataElement = class PacemWidgetDataElement extends PacemWidgetElement {
623
663
  constructor() {
624
664
  super(buildWidgetMetadata(DATA_METADATA$1));
@@ -681,6 +721,7 @@
681
721
  ]
682
722
  };
683
723
  const PARAMETER_TAGNAME = pacemCore.P + '-widget-fetch-parameter';
724
+ /** A single, named fetch parameter nested under a {@link PacemWidgetFetchElement}; setting `value` re-triggers the owning fetcher's `fetch()`. */
684
725
  let PacemWidgetFetchParameterElement = class PacemWidgetFetchParameterElement extends pacemCore.PacemEventTarget {
685
726
  propertyChangedCallback(name, old, val, first) {
686
727
  super.propertyChangedCallback(name, old, val.first);
@@ -708,6 +749,11 @@
708
749
  PacemWidgetFetchParameterElement = __decorate$a([
709
750
  pacemCore.CustomElement({ tagName: PARAMETER_TAGNAME })
710
751
  ], PacemWidgetFetchParameterElement);
752
+ /**
753
+ * Non-visual helper widget that fetches data from a REST endpoint chosen from a {@link PacemWidgetApiManifestElement}
754
+ * `manifest`, using its nested {@link PacemWidgetFetchParameterElement} children (see `_parameters`) as request
755
+ * parameters; the response is exposed as `result`.
756
+ */
711
757
  let PacemWidgetFetchElement = class PacemWidgetFetchElement extends PacemBearerWidgetElement {
712
758
  constructor() {
713
759
  super(buildWidgetMetadata(FETCH_METADATA));
@@ -724,6 +770,7 @@
724
770
  get _parameters() {
725
771
  return Array.from(this._itemsElement.children).filter(e => e.localName === PARAMETER_TAGNAME);
726
772
  }
773
+ /** Triggers the request against `endpoint`/`url`, provided all of the endpoint's required parameters are attached and populated; otherwise does nothing. */
727
774
  fetch() {
728
775
  const fetcher = this._fetcher, parameters = this._parameters || [], endpoint = this.endpoint;
729
776
  if (!pacemCore.Utils.isNull(endpoint)) {
@@ -860,9 +907,15 @@ on-${pacemCore.Net.FetchResultEventName}=":host._onresult($event)" on-${pacemCor
860
907
  prop: 'accessToken', type: EXPRESSION_METADATA_TYPE, display: { name: 'Access Token' },
861
908
  extra: pacemCore.Utils.extend({}, EXPRESSION_WIDGET_METADATA_EXTRA, { filter: (e) => e instanceof PacemWidgetDataElement || e instanceof PacemWidgetFetchElement })
862
909
  };
910
+ /**
911
+ * Base class for widgets that authenticate their own fetch requests with a bearer `accessToken` (turned into
912
+ * an `Authorization: Bearer ...` header on `fetchHeaders`). See {@link PacemWidgetApiManifestElement} and
913
+ * {@link PacemWidgetFetchElement} for the concrete implementations.
914
+ */
863
915
  class PacemBearerWidgetElement extends PacemWidgetElement {
864
916
  constructor() {
865
917
  super(...arguments);
918
+ /** Gets or sets the `credentials` mode used for the widget's fetch requests. */
866
919
  this.fetchCredentials = 'same-origin';
867
920
  }
868
921
  propertyChangedCallback(name, old, val, first) {
@@ -897,6 +950,7 @@ on-${pacemCore.Net.FetchResultEventName}=":host._onresult($event)" on-${pacemCor
897
950
  return c > 3 && r && Object.defineProperty(target, key, r), r;
898
951
  };
899
952
  //namespace Pacem.Components.Cms {
953
+ /** Non-visual helper widget, reserved for translation-related composition (no widget-specific behavior beyond {@link PacemWidgetElement}). */
900
954
  let PacemWidgetTranslatorElement = class PacemWidgetTranslatorElement extends PacemWidgetElement {
901
955
  };
902
956
  PacemWidgetTranslatorElement = __decorate$8([
@@ -927,9 +981,11 @@ on-${pacemCore.Net.FetchResultEventName}=":host._onresult($event)" on-${pacemCor
927
981
  }
928
982
  ]
929
983
  };
984
+ /** Non-visual helper widget exposing the current timestamp (`time`), refreshed every `interval` milliseconds by an internal `${P}-timer`. */
930
985
  let PacemWidgetClockElement = class PacemWidgetClockElement extends PacemWidgetElement {
931
986
  constructor() {
932
987
  super(buildWidgetMetadata(DATA_METADATA));
988
+ /** Gets or sets the tick interval, in milliseconds, at which `time` is refreshed. */
933
989
  this.interval = 0;
934
990
  }
935
991
  };
@@ -948,11 +1004,23 @@ on-${pacemCore.Net.FetchResultEventName}=":host._onresult($event)" on-${pacemCor
948
1004
  /// <reference path="./swagger-types.d.ts" />
949
1005
  //namespace Pacem.Cms.OpenApi {
950
1006
  const BAG = 'pacem:metadatabag';
1007
+ /**
1008
+ * Loads an OpenApi manifest (via the underlying {@link Scaffolding.OpenApi.OpenApiParser}) and eagerly
1009
+ * enriches every endpoint's request/response schemas into scaffolding-ready {@link Scaffolding.OpenApi.DataField}
1010
+ * metadata (fetched from each schema's absolute-url definition key, recursively for nested `$ref`s), optionally
1011
+ * caching the per-url metadata fetches through `cache`.
1012
+ */
951
1013
  class SwaggerCmsParser {
952
1014
  constructor(_openApi = new pacemScaffolding.Scaffolding.OpenApi.OpenApiParser()) {
953
1015
  this._openApi = _openApi;
954
1016
  this._cachedMetadataUrls = [];
955
1017
  }
1018
+ /**
1019
+ * Loads the OpenApi manifest at `url` and enriches every endpoint's request/response schemas with their
1020
+ * fetched field metadata (see `_enrichSchemas`).
1021
+ * @param url The OpenApi (swagger) json configuration's url.
1022
+ * @param headers Optional HTTP headers for both the manifest and the per-schema metadata fetches.
1023
+ */
956
1024
  async load(url, headers) {
957
1025
  let api = await this._openApi.load(url, headers);
958
1026
  if (api != null) {
@@ -978,6 +1046,7 @@ on-${pacemCore.Net.FetchResultEventName}=":host._onresult($event)" on-${pacemCor
978
1046
  }
979
1047
  }
980
1048
  }
1049
+ /** Removes from `cache` every metadata entry fetched by this parser so far. */
981
1050
  clearCache() {
982
1051
  const cache = this.cache, keys = this._cachedMetadataUrls;
983
1052
  if (cache) {
@@ -1096,6 +1165,7 @@ on-${pacemCore.Net.FetchResultEventName}=":host._onresult($event)" on-${pacemCor
1096
1165
  ACCESS_TOKEN_METADATA
1097
1166
  ]
1098
1167
  };
1168
+ /** Non-visual helper widget that parses an OpenApi document at `url` (via {@link SwaggerCmsParser}) into a `manifest`, typically referenced by a {@link PacemWidgetFetchElement}. */
1099
1169
  let PacemWidgetApiManifestElement = class PacemWidgetApiManifestElement extends PacemBearerWidgetElement {
1100
1170
  constructor(_openapi = new SwaggerCmsParser(), _cache = new pacemCore.Storage()) {
1101
1171
  super(buildWidgetMetadata(APIMANIFEST_METADATA));
@@ -1154,6 +1224,10 @@ on-${pacemCore.Net.FetchResultEventName}=":host._onresult($event)" on-${pacemCor
1154
1224
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1155
1225
  };
1156
1226
  //namespace Pacem.Components.Cms {
1227
+ /**
1228
+ * Base class for widgets that occupy a cell of a CSS grid-based layout (`column`/`row`/`colspan`/`rowspan`),
1229
+ * self-registering into the nearest ancestor {@link PacemCompositeWidgetElement} container (see `findContainer`).
1230
+ */
1157
1231
  class PacemUiWidgetElement extends PacemWidgetElement {
1158
1232
  constructor(metadata, colspan = 1, role) {
1159
1233
  super(metadata, role);
@@ -1234,20 +1308,25 @@ on-${pacemCore.Net.FetchResultEventName}=":host._onresult($event)" on-${pacemCor
1234
1308
  const WidgetRegisterEventName = "widgetregister";
1235
1309
  const WidgetUnregisterEventName = "widgetunregister";
1236
1310
  const LayoutChangeEventName = "layoutchange";
1311
+ /** Dispatched by a {@link PacemCompositeWidgetElement} right after a child widget is successfully registered into it. */
1237
1312
  class WidgetRegisterEvent extends CustomEvent {
1238
1313
  constructor(item, eventInit) {
1239
1314
  super(WidgetRegisterEventName, pacemCore.Utils.extend(eventInit || {}, { detail: item }));
1240
1315
  }
1241
1316
  }
1317
+ /** Dispatched by a {@link PacemCompositeWidgetElement} right after a child widget is unregistered from it. */
1242
1318
  class WidgetUnregisterEvent extends CustomEvent {
1243
1319
  constructor(item, eventInit) {
1244
1320
  super(WidgetUnregisterEventName, pacemCore.Utils.extend(eventInit || {}, { detail: item }));
1245
1321
  }
1246
1322
  }
1323
+ /** Base class for widgets that act as a container ({@link CompositeWidget}) for other {@link PacemUiWidgetElement} widgets. See {@link PacemGridWidgetElement} and `PacemWidgetPickerElement` for concrete implementations. */
1247
1324
  class PacemCompositeWidgetElement extends PacemUiWidgetElement {
1325
+ /** Gets the `Element` new items are appended to; defaults to this widget itself. */
1248
1326
  get itemsElement() {
1249
1327
  return this;
1250
1328
  }
1329
+ /** Gets whether `item` is an acceptable child of this container; overridable by subclasses to narrow the accepted item type. */
1251
1330
  validate(item) {
1252
1331
  return item instanceof PacemUiWidgetElement;
1253
1332
  }
@@ -1319,6 +1398,7 @@ on-${pacemCore.Net.FetchResultEventName}=":host._onresult($event)" on-${pacemCor
1319
1398
  prop: 'text', type: EXPRESSION_METADATA_TYPE, display: { name: 'Text' }, extra: EXPRESSION_WIDGET_METADATA_EXTRA
1320
1399
  }]
1321
1400
  });
1401
+ /** UI widget rendering a plain (optionally expression-bound) piece of text via an inner `${P}-text`. */
1322
1402
  let PacemWidgetTextElement = class PacemWidgetTextElement extends PacemUiWidgetElement {
1323
1403
  constructor() {
1324
1404
  super(TEXT_METADATA);
@@ -1441,6 +1521,12 @@ on-${pacemCore.Net.FetchResultEventName}=":host._onresult($event)" on-${pacemCor
1441
1521
  }
1442
1522
  ]
1443
1523
  };
1524
+ /**
1525
+ * Composition widget that lays out child {@link PacemUiWidgetElement} widgets in a CSS grid: on `register`
1526
+ * it finds a free spot (or grows the grid) for the new item's `column`/`row`/`colspan`/`rowspan`, and while
1527
+ * `editing` it enables drag-move/resize behaviors (backed by internal `${P}-drag-drop`/`${P}-rescale`
1528
+ * elements) plus an overlay of selectable grid-cell boxes.
1529
+ */
1444
1530
  let PacemGridWidgetElement = class PacemGridWidgetElement extends PacemCompositeWidgetElement {
1445
1531
  constructor() {
1446
1532
  super(buildWidgetMetadata(GRID_METADATA), FALLBACK_COLUMNS, "grid");
@@ -1757,7 +1843,14 @@ on-${pacemCore.Net.FetchResultEventName}=":host._onresult($event)" on-${pacemCor
1757
1843
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1758
1844
  };
1759
1845
  //namespace Pacem.Components.Cms {
1760
- /** Default metadata ('expression' field) 'type' factory. */
1846
+ /**
1847
+ * Default metadata ('expression' field) 'type' factory: renders a `${P}-datacolumns` field bound to the
1848
+ * given entity's `prop` (via `extra.properties`, either a property name or a factory function), used to
1849
+ * edit the field's underlying {@link DataColumn}[] value.
1850
+ * @param host The form field element requesting the markup.
1851
+ * @param hostRef Binding-expression reference to `host` (defaults to `:host`).
1852
+ * @param hostEntityRef Binding-expression reference to `host.entity` (defaults to `:host.entity`).
1853
+ */
1761
1854
  const DATACOLUMNS_METADATA_TYPE = (host, hostRef = ':host', hostEntityRef = ':host.entity') => {
1762
1855
  const attrs = {}, meta = host.metadata, fns = Functions, fnKeys = [];
1763
1856
  attrs['properties'] = `{{ Pacem.CustomElementUtils.getWatchedProperty(${hostEntityRef}, '${meta.prop}').config.converter }}`;
@@ -1794,6 +1887,7 @@ on-${pacemCore.Net.FetchResultEventName}=":host._onresult($event)" on-${pacemCor
1794
1887
  }
1795
1888
  ]
1796
1889
  };
1890
+ /** Single-column editor (header/content) used by {@link PacemDataColumnsElement}, self-scaffolding its inner `${P}-form` against `DATACOLUMN_METADATA`. */
1797
1891
  let PacemDataColumnElement = class PacemDataColumnElement extends pacemCore.Components.PacemElement {
1798
1892
  propertyChangedCallback(name, old, val, first) {
1799
1893
  super.propertyChangedCallback(name, old, val, first);
@@ -1830,6 +1924,10 @@ on-${pacemCore.Net.FetchResultEventName}=":host._onresult($event)" on-${pacemCor
1830
1924
  template: `<${pacemCore.P}-form class="panel-body" autogenerate="true"></${pacemCore.P}-form>`
1831
1925
  })
1832
1926
  ], PacemDataColumnElement);
1927
+ /**
1928
+ * Form field for authoring a list of {@link DataColumn}s (`value`) by drag-dropping entries from the
1929
+ * available `properties` onto the columns strip, each rendered/edited through a nested {@link PacemDataColumnElement}.
1930
+ */
1833
1931
  let PacemDataColumnsElement = class PacemDataColumnsElement extends pacemScaffolding.Components.Scaffolding.PacemBaseElement {
1834
1932
  constructor() {
1835
1933
  super(...arguments);
@@ -2026,11 +2124,20 @@ on-${pacemCore.Net.FetchResultEventName}=":host._onresult($event)" on-${pacemCor
2026
2124
  <template>${body0.innerHTML}</template>
2027
2125
  </div></${pacemCore.P}-repeater>`;
2028
2126
  }
2127
+ /**
2128
+ * UI widget rendering `datasource` as a CSS-grid-based data table: one `${P}-repeater`-driven row per item,
2129
+ * one head/data cell pair per `columns` entry, with `datarowMetadata` auto-extracted from the first bound
2130
+ * item (see `_extractMetadataJustInCase`) whenever it isn't supplied. Its markup is entirely (re)generated
2131
+ * as plain `innerHTML` (see `datagridInnerHTML`) whenever `columns` changes.
2132
+ */
2029
2133
  let PacemWidgetDataGridElement = class PacemWidgetDataGridElement extends PacemUiWidgetElement {
2030
2134
  constructor() {
2031
2135
  super(DATAGRID_METADATA);
2136
+ /** Gets or sets the rendered columns (header + per-row content expression); reassigning rebuilds the widget's markup. */
2032
2137
  this.columns = [];
2138
+ /** Gets or sets the rows rendered by the grid. */
2033
2139
  this.datasource = [];
2140
+ /** Gets or sets the field metadata describing a `datasource` row; auto-extracted from the first bound item when left unset. */
2034
2141
  this.datarowMetadata = [];
2035
2142
  this._builtUponDatasource = false;
2036
2143
  }
@@ -2166,17 +2273,25 @@ on-${pacemCore.Net.FetchResultEventName}=":host._onresult($event)" on-${pacemCor
2166
2273
  });
2167
2274
 
2168
2275
  const PermissionEditEventName = 'permissionedit';
2276
+ /** Dispatched to request permission-editing UI for the given {@link Permissible} resource. */
2169
2277
  class PermissionEditEvent extends CustomEvent {
2170
2278
  constructor(permissible) {
2171
2279
  super(PermissionEditEventName, { detail: permissible, cancelable: false, bubbles: true });
2172
2280
  }
2173
2281
  }
2282
+ /** Static, claim-based authorization checks (edit/read/add/delete/translate) against a {@link Permissible} resource's {@link Permission} list. */
2174
2283
  class Permissible {
2284
+ /** Gets whether `claims` grants edit (update) permission on `resource`. */
2175
2285
  static canEdit(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.update); }
2286
+ /** Gets whether `claims` grants read permission on `resource`. */
2176
2287
  static canRead(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.read); }
2288
+ /** Gets whether `claims` grants add (create) permission on `resource`. */
2177
2289
  static canAdd(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.create); }
2290
+ /** Gets whether `claims` grants delete permission on `resource`. */
2178
2291
  static canDelete(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.delete); }
2292
+ /** Gets whether `claims` grants translate permission on `resource`. */
2179
2293
  static canTranslate(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.translate); }
2294
+ /** Returns whether `claims` satisfies `predicate` for at least one of `resource.permissions`; when `resource.permissions` is empty, access is unrestricted (returns `true`). */
2180
2295
  static _canDoSomethingToResource(claims, resource, predicate) {
2181
2296
  if (pacemCore.Utils.isNullOrEmpty(claims) || pacemCore.Utils.isNull(resource)) {
2182
2297
  return false;