@pacem/pacem-cms 1.0.0-bessel → 1.0.0-binet
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/pacem-cms.js +118 -3
- package/dist/browser/pacem-cms.js.map +1 -1
- package/dist/browser/pacem-cms.min.js +1 -1
- package/dist/bundle/pacem-cms.min.mjs +1 -1
- package/dist/bundle/pacem-cms.mjs +17 -1
- package/dist/bundle/pacem-cms.mjs.map +2 -2
- package/dist/docs/pacem-cms.json +9325 -0
- package/dist/esm/index-iife.js +1 -1
- package/dist/esm/index.cms.js +1 -1
- package/dist/esm/index.components.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/types.js +9 -1
- package/package.json +2 -1
- package/typings/index.d.ts +178 -2
package/dist/esm/index-iife.js
CHANGED
package/dist/esm/index.cms.js
CHANGED
package/dist/esm/index.js
CHANGED
package/dist/esm/types.js
CHANGED
|
@@ -1,21 +1,29 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pacem/pacem-cms v1.0.0-
|
|
2
|
+
* @pacem/pacem-cms v1.0.0-binet (https://js.pacem.it)
|
|
3
3
|
* Pacem (https://pacem.it)
|
|
4
4
|
* Licensed under Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { Utils } from '@pacem/pacem-core';
|
|
7
7
|
export const PermissionEditEventName = 'permissionedit';
|
|
8
|
+
/** Dispatched to request permission-editing UI for the given {@link Permissible} resource. */
|
|
8
9
|
export class PermissionEditEvent extends CustomEvent {
|
|
9
10
|
constructor(permissible) {
|
|
10
11
|
super(PermissionEditEventName, { detail: permissible, cancelable: false, bubbles: true });
|
|
11
12
|
}
|
|
12
13
|
}
|
|
14
|
+
/** Static, claim-based authorization checks (edit/read/add/delete/translate) against a {@link Permissible} resource's {@link Permission} list. */
|
|
13
15
|
export class Permissible {
|
|
16
|
+
/** Gets whether `claims` grants edit (update) permission on `resource`. */
|
|
14
17
|
static canEdit(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.update); }
|
|
18
|
+
/** Gets whether `claims` grants read permission on `resource`. */
|
|
15
19
|
static canRead(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.read); }
|
|
20
|
+
/** Gets whether `claims` grants add (create) permission on `resource`. */
|
|
16
21
|
static canAdd(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.create); }
|
|
22
|
+
/** Gets whether `claims` grants delete permission on `resource`. */
|
|
17
23
|
static canDelete(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.delete); }
|
|
24
|
+
/** Gets whether `claims` grants translate permission on `resource`. */
|
|
18
25
|
static canTranslate(claims, resource) { return this._canDoSomethingToResource(claims, resource, p => p.translate); }
|
|
26
|
+
/** Returns whether `claims` satisfies `predicate` for at least one of `resource.permissions`; when `resource.permissions` is empty, access is unrestricted (returns `true`). */
|
|
19
27
|
static _canDoSomethingToResource(claims, resource, predicate) {
|
|
20
28
|
if (Utils.isNullOrEmpty(claims) || Utils.isNull(resource)) {
|
|
21
29
|
return false;
|
package/package.json
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
"dist/browser/*.*",
|
|
5
5
|
"dist/bundle/*.*",
|
|
6
6
|
"dist/esm/*.*",
|
|
7
|
+
"dist/docs/*.*",
|
|
7
8
|
"typings/*.*",
|
|
8
9
|
"README.md",
|
|
9
10
|
"LICENSE",
|
|
@@ -28,7 +29,7 @@
|
|
|
28
29
|
"types": "./typings/index.d.ts"
|
|
29
30
|
}
|
|
30
31
|
},
|
|
31
|
-
"version": "1.0.0-
|
|
32
|
+
"version": "1.0.0-binet",
|
|
32
33
|
"author": {
|
|
33
34
|
"name": "Pacem",
|
|
34
35
|
"url": "https://pacem.it"
|
package/typings/index.d.ts
CHANGED
|
@@ -10,8 +10,14 @@ import { Storage as Storage_2 } from '@pacem/pacem-core';
|
|
|
10
10
|
|
|
11
11
|
declare const ACCESS_TOKEN_METADATA: Scaffolding.PropertyMetadata;
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Merges `metadata` on top of {@link DEFAULT_METADATA} (the common `tag` property/display), cellifying every
|
|
15
|
+
* resulting property's display (see `cellifyMetadata`); used by widget constructors to build their `metadata`.
|
|
16
|
+
* @param metadata Widget-specific metadata to merge on top of the defaults.
|
|
17
|
+
*/
|
|
13
18
|
declare function buildWidgetMetadata(metadata?: Scaffolding.TypeMetadata): Scaffolding.TypeMetadata;
|
|
14
19
|
|
|
20
|
+
/** Maps a claim type to the set of claim values held by the current user/context. */
|
|
15
21
|
declare type Claims = {
|
|
16
22
|
[name: string]: string[];
|
|
17
23
|
};
|
|
@@ -75,12 +81,14 @@ export declare namespace Components {
|
|
|
75
81
|
}
|
|
76
82
|
}
|
|
77
83
|
|
|
84
|
+
/** Contract for a container of {@link PacemUiWidgetElement} items, backed by the `Element` (`itemsElement`) their DOM nodes are appended to. */
|
|
78
85
|
declare interface CompositeWidget extends ItemsContainer<PacemUiWidgetElement> {
|
|
79
86
|
readonly itemsElement: Element;
|
|
80
87
|
register(item: PacemUiWidgetElement): boolean;
|
|
81
88
|
unregister(item: PacemUiWidgetElement): boolean;
|
|
82
89
|
}
|
|
83
90
|
|
|
91
|
+
/** A single rendered column of a data-grid-like widget: its header label, its per-row content (expression, constant, ...) and an optional relative/`'auto'` width. */
|
|
84
92
|
declare interface DataColumn {
|
|
85
93
|
header: string;
|
|
86
94
|
/** expression, constant, ... */
|
|
@@ -88,7 +96,14 @@ declare interface DataColumn {
|
|
|
88
96
|
width?: number | 'auto';
|
|
89
97
|
}
|
|
90
98
|
|
|
91
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* Default metadata ('expression' field) 'type' factory: renders a `${P}-datacolumns` field bound to the
|
|
101
|
+
* given entity's `prop` (via `extra.properties`, either a property name or a factory function), used to
|
|
102
|
+
* edit the field's underlying {@link DataColumn}[] value.
|
|
103
|
+
* @param host The form field element requesting the markup.
|
|
104
|
+
* @param hostRef Binding-expression reference to `host` (defaults to `:host`).
|
|
105
|
+
* @param hostEntityRef Binding-expression reference to `host.entity` (defaults to `:host.entity`).
|
|
106
|
+
*/
|
|
92
107
|
declare const DATACOLUMNS_METADATA_TYPE: (host: Components_2.Scaffolding.PacemFormFieldElement, hostRef?: string, hostEntityRef?: string) => {
|
|
93
108
|
tagName: string;
|
|
94
109
|
attrs: {
|
|
@@ -98,7 +113,14 @@ declare const DATACOLUMNS_METADATA_TYPE: (host: Components_2.Scaffolding.PacemFo
|
|
|
98
113
|
|
|
99
114
|
declare const DEFAULT_METADATA: Scaffolding.TypeMetadata;
|
|
100
115
|
|
|
101
|
-
/**
|
|
116
|
+
/**
|
|
117
|
+
* Default metadata ('expression' field) 'type' factory: renders a `${P}-expression` field bound to the
|
|
118
|
+
* given entity's `prop` attribute (or, for plain objects, the property itself), relaying value changes back
|
|
119
|
+
* through {@link Functions.handleExpressionValueChange} and honoring the field's `extra.selector`/`filter`/`labeler`.
|
|
120
|
+
* @param host The form field element requesting the markup.
|
|
121
|
+
* @param hostRef Binding-expression reference to `host` (defaults to `:host`).
|
|
122
|
+
* @param hostEntityRef Binding-expression reference to `host.entity` (defaults to `:host.entity`).
|
|
123
|
+
*/
|
|
102
124
|
declare const EXPRESSION_METADATA_TYPE: (host: Components_2.Scaffolding.PacemFormFieldElement, hostRef?: string, hostEntityRef?: string) => {
|
|
103
125
|
tagName: string;
|
|
104
126
|
attrs: {
|
|
@@ -112,6 +134,7 @@ declare const EXPRESSION_WIDGET_METADATA_EXTRA: {
|
|
|
112
134
|
labeler: (e: Widget) => string;
|
|
113
135
|
};
|
|
114
136
|
|
|
137
|
+
/** The kind of value a {@link PacemExpressionElement} is currently editing, as picked in its source selector. */
|
|
115
138
|
declare enum ExpressionSource {
|
|
116
139
|
Constant = "const",
|
|
117
140
|
PropertyReference = "property",
|
|
@@ -127,6 +150,12 @@ declare const Functions: {
|
|
|
127
150
|
|
|
128
151
|
declare const GRID_COLUMNS = 12;
|
|
129
152
|
|
|
153
|
+
/**
|
|
154
|
+
* Adds the `${PCSS}-cell`/grid CSS classes to `metadata`'s display and to each of its properties' display,
|
|
155
|
+
* so that a generated form lays its fields out as grid cells (used for the datacolumns/fetch-parameters
|
|
156
|
+
* sub-grids editors, as opposed to {@link buildWidgetMetadata} which is used for a widget's own root metadata).
|
|
157
|
+
* @param metadata The metadata to adapt; defaults to an empty `{ props: [] }`-like metadata when omitted.
|
|
158
|
+
*/
|
|
130
159
|
declare function gridifyMetadata(metadata?: Scaffolding.TypeMetadata): Scaffolding.TypeMetadata;
|
|
131
160
|
|
|
132
161
|
declare const LayoutChangeEventName = "layoutchange";
|
|
@@ -137,21 +166,34 @@ export declare namespace OpenApi {
|
|
|
137
166
|
}
|
|
138
167
|
}
|
|
139
168
|
|
|
169
|
+
/**
|
|
170
|
+
* Base class for widgets that authenticate their own fetch requests with a bearer `accessToken` (turned into
|
|
171
|
+
* an `Authorization: Bearer ...` header on `fetchHeaders`). See {@link PacemWidgetApiManifestElement} and
|
|
172
|
+
* {@link PacemWidgetFetchElement} for the concrete implementations.
|
|
173
|
+
*/
|
|
140
174
|
declare abstract class PacemBearerWidgetElement extends PacemWidgetElement implements Net.OAuthFetchable {
|
|
175
|
+
/** Gets or sets the `credentials` mode used for the widget's fetch requests. */
|
|
141
176
|
fetchCredentials: RequestCredentials;
|
|
177
|
+
/** Gets or sets the HTTP headers sent with the widget's fetch requests; recomputed from `accessToken` when that changes. */
|
|
142
178
|
fetchHeaders: {
|
|
143
179
|
[key: string]: string;
|
|
144
180
|
};
|
|
181
|
+
/** Gets or sets the bearer token used to authenticate the widget's fetch requests. */
|
|
145
182
|
accessToken: {
|
|
146
183
|
[key: string]: string;
|
|
147
184
|
};
|
|
185
|
+
/** Gets or sets whether a fetch request is currently in flight. */
|
|
148
186
|
fetching: boolean;
|
|
149
187
|
propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
|
|
150
188
|
}
|
|
151
189
|
|
|
190
|
+
/** Base class for widgets that act as a container ({@link CompositeWidget}) for other {@link PacemUiWidgetElement} widgets. See {@link PacemGridWidgetElement} and `PacemWidgetPickerElement` for concrete implementations. */
|
|
152
191
|
declare abstract class PacemCompositeWidgetElement extends PacemUiWidgetElement implements CompositeWidget {
|
|
192
|
+
/** @readonly Gets the currently registered child widgets. */
|
|
153
193
|
items: PacemUiWidgetElement[];
|
|
194
|
+
/** Gets the `Element` new items are appended to; defaults to this widget itself. */
|
|
154
195
|
get itemsElement(): this;
|
|
196
|
+
/** Gets whether `item` is an acceptable child of this container; overridable by subclasses to narrow the accepted item type. */
|
|
155
197
|
protected validate(item: PacemUiWidgetElement): boolean;
|
|
156
198
|
viewActivatedCallback(): void;
|
|
157
199
|
/**
|
|
@@ -171,20 +213,29 @@ declare abstract class PacemCompositeWidgetElement extends PacemUiWidgetElement
|
|
|
171
213
|
unregister(item: PacemUiWidgetElement): boolean;
|
|
172
214
|
}
|
|
173
215
|
|
|
216
|
+
/** Single-column editor (header/content) used by {@link PacemDataColumnsElement}, self-scaffolding its inner `${P}-form` against `DATACOLUMN_METADATA`. */
|
|
174
217
|
declare class PacemDataColumnElement extends Components_3.PacemElement {
|
|
218
|
+
/** Gets or sets the column's header label. */
|
|
175
219
|
header: string;
|
|
220
|
+
/** Gets or sets the column's content attribute, mirrored from/to `contentExpression`. */
|
|
176
221
|
content: string;
|
|
222
|
+
/** Gets or sets the column's content as an expression string, mirrored from/to the `content` attribute. */
|
|
177
223
|
contentExpression: string;
|
|
178
224
|
private _form;
|
|
179
225
|
propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
|
|
180
226
|
viewActivatedCallback(): void;
|
|
181
227
|
}
|
|
182
228
|
|
|
229
|
+
/**
|
|
230
|
+
* Form field for authoring a list of {@link DataColumn}s (`value`) by drag-dropping entries from the
|
|
231
|
+
* available `properties` onto the columns strip, each rendered/edited through a nested {@link PacemDataColumnElement}.
|
|
232
|
+
*/
|
|
183
233
|
declare class PacemDataColumnsElement extends Components_2.Scaffolding.PacemBaseElement {
|
|
184
234
|
private _repeater;
|
|
185
235
|
private _propDragger;
|
|
186
236
|
private _colDragger;
|
|
187
237
|
private _dropTarget;
|
|
238
|
+
/** Gets or sets the properties available to be dragged in as new columns. */
|
|
188
239
|
properties: Partial<Scaffolding.PropertyMetadata>[];
|
|
189
240
|
protected get inputFields(): HTMLElement[];
|
|
190
241
|
protected toggleReadonlyView(readonly: boolean): void;
|
|
@@ -198,6 +249,7 @@ declare class PacemDataColumnsElement extends Components_2.Scaffolding.PacemBase
|
|
|
198
249
|
private _columnifyMetadata;
|
|
199
250
|
}
|
|
200
251
|
|
|
252
|
+
/** Form field for picking an `Element` (identified by its `id`) among those matching `selector`/`filter`, listed in a `${P}-select`. */
|
|
201
253
|
declare class PacemElementPickerElement extends PacemElementPickerElementBase {
|
|
202
254
|
protected get inputFields(): HTMLElement[];
|
|
203
255
|
protected toggleReadonlyView(readonly: boolean): void;
|
|
@@ -211,12 +263,25 @@ declare class PacemElementPickerElement extends PacemElementPickerElementBase {
|
|
|
211
263
|
private _databind;
|
|
212
264
|
}
|
|
213
265
|
|
|
266
|
+
/**
|
|
267
|
+
* Base class for form fields that let the user pick an `Element` from the current document, filtered by
|
|
268
|
+
* `selector`/`filter` and displayed through `labeler`. See {@link PacemElementPickerElement} for the concrete
|
|
269
|
+
* `${P}-select`-backed implementation.
|
|
270
|
+
*/
|
|
214
271
|
declare abstract class PacemElementPickerElementBase extends Components_2.Scaffolding.PacemBaseElement {
|
|
272
|
+
/** Gets or sets the CSS selector used to query the candidate elements (defaults to `[pacem]`). */
|
|
215
273
|
selector: string;
|
|
274
|
+
/** Gets or sets the predicate further restricting the candidate elements queried by `selector`. */
|
|
216
275
|
filter: (e: Element) => boolean;
|
|
276
|
+
/** Gets or sets the function projecting a candidate element into its display label. */
|
|
217
277
|
labeler: (e: Element) => string;
|
|
218
278
|
}
|
|
219
279
|
|
|
280
|
+
/**
|
|
281
|
+
* Form field for building a Pacem binding-expression string, either as a plain constant, a picked
|
|
282
|
+
* element/property reference (via {@link PacemElementPickerElementBase}), or a free-hand expression typed
|
|
283
|
+
* into an inner `${P}-textarea`; a live preview of the evaluated `value` is shown alongside the field.
|
|
284
|
+
*/
|
|
220
285
|
declare class PacemExpressionElement extends PacemElementPickerElementBase {
|
|
221
286
|
converter: PropertyConverter;
|
|
222
287
|
private _editing;
|
|
@@ -239,19 +304,34 @@ declare class PacemExpressionElement extends PacemElementPickerElementBase {
|
|
|
239
304
|
private _reverseStructure;
|
|
240
305
|
}
|
|
241
306
|
|
|
307
|
+
/**
|
|
308
|
+
* Composition widget that lays out child {@link PacemUiWidgetElement} widgets in a CSS grid: on `register`
|
|
309
|
+
* it finds a free spot (or grows the grid) for the new item's `column`/`row`/`colspan`/`rowspan`, and while
|
|
310
|
+
* `editing` it enables drag-move/resize behaviors (backed by internal `${P}-drag-drop`/`${P}-rescale`
|
|
311
|
+
* elements) plus an overlay of selectable grid-cell boxes.
|
|
312
|
+
*/
|
|
242
313
|
declare class PacemGridWidgetElement extends PacemCompositeWidgetElement {
|
|
243
314
|
constructor();
|
|
244
315
|
register(item: PacemUiWidgetElement): boolean;
|
|
245
316
|
unregister(item: PacemUiWidgetElement): boolean;
|
|
246
317
|
private _widgetPropertyChange;
|
|
318
|
+
/** Gets or sets the pixel size of one layout unit (used to convert `marginTop`/`marginBottom`/`rowGap`/`columnGap` into pixels). */
|
|
247
319
|
unit: number;
|
|
320
|
+
/** Gets or sets the grid's top margin, in `unit`s. */
|
|
248
321
|
marginTop: number;
|
|
322
|
+
/** Gets or sets the grid's bottom margin, in `unit`s. */
|
|
249
323
|
marginBottom: number;
|
|
324
|
+
/** Gets or sets the number of grid columns. */
|
|
250
325
|
columns: number;
|
|
326
|
+
/** Gets or sets the number of grid rows; automatically grown when a child widget needs a new row. */
|
|
251
327
|
rows: number;
|
|
328
|
+
/** Gets or sets the minimum row height (a CSS length, or a number of pixels). */
|
|
252
329
|
minRowheight: number | 'string';
|
|
330
|
+
/** Gets or sets the row height (a CSS length, or a number of pixels). */
|
|
253
331
|
rowheight: number | 'string';
|
|
332
|
+
/** Gets or sets the gap between rows, in `unit`s. */
|
|
254
333
|
rowGap: number;
|
|
334
|
+
/** Gets or sets the gap between columns, in `unit`s. */
|
|
255
335
|
columnGap: number;
|
|
256
336
|
private _dragDrop;
|
|
257
337
|
private _rescaler;
|
|
@@ -270,6 +350,10 @@ declare class PacemGridWidgetElement extends PacemCompositeWidgetElement {
|
|
|
270
350
|
private _setGridLines;
|
|
271
351
|
}
|
|
272
352
|
|
|
353
|
+
/**
|
|
354
|
+
* Base class for widgets that occupy a cell of a CSS grid-based layout (`column`/`row`/`colspan`/`rowspan`),
|
|
355
|
+
* self-registering into the nearest ancestor {@link PacemCompositeWidgetElement} container (see `findContainer`).
|
|
356
|
+
*/
|
|
273
357
|
declare abstract class PacemUiWidgetElement extends PacemWidgetElement {
|
|
274
358
|
constructor(metadata: Scaffolding.TypeMetadata, colspan?: number, role?: string);
|
|
275
359
|
connectedCallback(): void;
|
|
@@ -281,41 +365,65 @@ declare abstract class PacemUiWidgetElement extends PacemWidgetElement {
|
|
|
281
365
|
viewActivatedCallback(): void;
|
|
282
366
|
disconnectedCallback(): void;
|
|
283
367
|
/** Default configuration (grid) */
|
|
368
|
+
/** Gets or sets the widget's 0-based starting column in the layout grid. */
|
|
284
369
|
column: number;
|
|
370
|
+
/** Gets or sets the widget's 0-based starting row in the layout grid. */
|
|
285
371
|
row: number;
|
|
372
|
+
/** Gets or sets how many columns the widget spans. */
|
|
286
373
|
colspan: number;
|
|
374
|
+
/** Gets or sets how many rows the widget spans. */
|
|
287
375
|
rowspan: number;
|
|
376
|
+
/** Gets or sets whether the widget's cell is rendered with borders. */
|
|
288
377
|
borders: boolean;
|
|
378
|
+
/** Gets or sets whether the widget's cell is rendered with rounded corners. */
|
|
289
379
|
corners: boolean;
|
|
290
380
|
}
|
|
291
381
|
|
|
382
|
+
/** Non-visual helper widget that parses an OpenApi document at `url` (via {@link SwaggerCmsParser}) into a `manifest`, typically referenced by a {@link PacemWidgetFetchElement}. */
|
|
292
383
|
declare class PacemWidgetApiManifestElement extends PacemBearerWidgetElement {
|
|
293
384
|
private _openapi;
|
|
294
385
|
private _cache;
|
|
295
386
|
constructor(_openapi?: SwaggerCmsParser, _cache?: Storage_2);
|
|
387
|
+
/** Gets or sets the url of the OpenApi (swagger) json configuration to parse. */
|
|
296
388
|
url: string;
|
|
389
|
+
/** Gets or sets whether the parsed manifest is cached per-url. */
|
|
297
390
|
usecache: boolean;
|
|
391
|
+
/** @readonly Gets the manifest parsed from `url`. */
|
|
298
392
|
manifest: Scaffolding.OpenApi.ApiManifest;
|
|
299
393
|
propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
|
|
300
394
|
viewActivatedCallback(): void;
|
|
301
395
|
private _scaffold;
|
|
302
396
|
}
|
|
303
397
|
|
|
398
|
+
/** Non-visual helper widget exposing the current timestamp (`time`), refreshed every `interval` milliseconds by an internal `${P}-timer`. */
|
|
304
399
|
declare class PacemWidgetClockElement extends PacemWidgetElement {
|
|
305
400
|
constructor();
|
|
401
|
+
/** Gets or sets the tick interval, in milliseconds, at which `time` is refreshed. */
|
|
306
402
|
interval: number;
|
|
403
|
+
/** @readonly Gets the current timestamp (`Date.now()` at the last tick). */
|
|
307
404
|
time: number;
|
|
308
405
|
}
|
|
309
406
|
|
|
407
|
+
/** Non-visual helper widget exposing an arbitrary `model` object, typically referenced as a data source by other widgets/expressions. */
|
|
310
408
|
declare class PacemWidgetDataElement extends PacemWidgetElement {
|
|
311
409
|
constructor();
|
|
410
|
+
/** Gets or sets the arbitrary data object exposed by this widget. */
|
|
312
411
|
model: any;
|
|
313
412
|
}
|
|
314
413
|
|
|
414
|
+
/**
|
|
415
|
+
* UI widget rendering `datasource` as a CSS-grid-based data table: one `${P}-repeater`-driven row per item,
|
|
416
|
+
* one head/data cell pair per `columns` entry, with `datarowMetadata` auto-extracted from the first bound
|
|
417
|
+
* item (see `_extractMetadataJustInCase`) whenever it isn't supplied. Its markup is entirely (re)generated
|
|
418
|
+
* as plain `innerHTML` (see `datagridInnerHTML`) whenever `columns` changes.
|
|
419
|
+
*/
|
|
315
420
|
declare class PacemWidgetDataGridElement extends PacemUiWidgetElement {
|
|
316
421
|
constructor();
|
|
422
|
+
/** Gets or sets the rendered columns (header + per-row content expression); reassigning rebuilds the widget's markup. */
|
|
317
423
|
columns: DataColumn[];
|
|
424
|
+
/** Gets or sets the rows rendered by the grid. */
|
|
318
425
|
datasource: any[];
|
|
426
|
+
/** Gets or sets the field metadata describing a `datasource` row; auto-extracted from the first bound item when left unset. */
|
|
319
427
|
datarowMetadata: Partial<Scaffolding.PropertyMetadata>[];
|
|
320
428
|
_datatable: HTMLElement;
|
|
321
429
|
_template: HTMLTemplateElement;
|
|
@@ -328,6 +436,12 @@ declare class PacemWidgetDataGridElement extends PacemUiWidgetElement {
|
|
|
328
436
|
private _extractMetadataJustInCase;
|
|
329
437
|
}
|
|
330
438
|
|
|
439
|
+
/**
|
|
440
|
+
* Base class for CMS widgets: assigns each instance a stable `id`, exposes an `editing`/`editable` toggle
|
|
441
|
+
* backed by a hover-triggered {@link PacemWidgetToolbarElement} balloon (edit/permissions/remove actions),
|
|
442
|
+
* and carries the `metadata`/`permissionMetadata`/`permissions` used to scaffold its editing forms. See
|
|
443
|
+
* {@link PacemUiWidgetElement} and {@link PacemBearerWidgetElement} for further specialized bases.
|
|
444
|
+
*/
|
|
331
445
|
declare abstract class PacemWidgetElement extends Components_3.PacemElement implements Widget {
|
|
332
446
|
constructor(metadata: Scaffolding.TypeMetadata, role?: string);
|
|
333
447
|
connectedCallback(): void;
|
|
@@ -340,24 +454,44 @@ declare abstract class PacemWidgetElement extends Components_3.PacemElement impl
|
|
|
340
454
|
private _disposeBalloon;
|
|
341
455
|
/** Gets or sets whether the widget is currently in editing mode. */
|
|
342
456
|
editing: boolean;
|
|
457
|
+
/** Gets or sets whether the widget might be edited at all; disabling it also tears down its toolbar balloon. */
|
|
343
458
|
editable: boolean;
|
|
459
|
+
/** Gets or sets the widget's display tag/name, shown by its toolbar. */
|
|
344
460
|
tag: string;
|
|
461
|
+
/** Gets or sets the widget's {@link Permission} rules. */
|
|
345
462
|
permissions: Permission[];
|
|
463
|
+
/** Gets or sets the scaffolding metadata describing the widget's own editable properties. */
|
|
346
464
|
metadata: Scaffolding.TypeMetadata;
|
|
465
|
+
/** Gets or sets the scaffolding metadata describing the widget's permission-editing form. */
|
|
347
466
|
permissionMetadata: Scaffolding.TypeMetadata;
|
|
348
467
|
}
|
|
349
468
|
|
|
469
|
+
/**
|
|
470
|
+
* Non-visual helper widget that fetches data from a REST endpoint chosen from a {@link PacemWidgetApiManifestElement}
|
|
471
|
+
* `manifest`, using its nested {@link PacemWidgetFetchParameterElement} children (see `_parameters`) as request
|
|
472
|
+
* parameters; the response is exposed as `result`.
|
|
473
|
+
*/
|
|
350
474
|
declare class PacemWidgetFetchElement extends PacemBearerWidgetElement {
|
|
351
475
|
constructor();
|
|
476
|
+
/** Gets or sets the OpenApi manifest describing the endpoints available to `endpoint`. */
|
|
352
477
|
manifest: Scaffolding.OpenApi.ApiManifest;
|
|
478
|
+
/** Gets or sets the endpoint, picked from `manifest`, to fetch from; setting it re-derives `url`/`method`/`fields` and syncs the child parameter elements. */
|
|
353
479
|
endpoint: Scaffolding.OpenApi.ApiEndpoint;
|
|
480
|
+
/** Gets or sets the fetch url, derived from `manifest.baseUrl` and `endpoint.path`. */
|
|
354
481
|
url: string;
|
|
482
|
+
/** Gets or sets the HTTP method, derived from `endpoint.method`. */
|
|
355
483
|
method: Net.HttpMethod;
|
|
484
|
+
/** Gets or sets the response's field metadata, derived from `endpoint.response.fields`. */
|
|
356
485
|
fields: Scaffolding.TypeMetadata | Scaffolding.PropertyMetadata[];
|
|
486
|
+
/** Gets or sets the parameter values (editing-time convenience mirror of the nested {@link PacemWidgetFetchParameterElement} children). */
|
|
357
487
|
parameters: any[];
|
|
488
|
+
/** @readonly Gets the last fetched result. */
|
|
358
489
|
result: any[];
|
|
490
|
+
/** @readonly Gets whether a fetch request is currently in flight. */
|
|
359
491
|
fetching: boolean;
|
|
492
|
+
/** @readonly Gets whether the last fetch request completed successfully. */
|
|
360
493
|
success: boolean;
|
|
494
|
+
/** @readonly Gets whether the last fetch request failed. */
|
|
361
495
|
failure: boolean;
|
|
362
496
|
private _fetcher;
|
|
363
497
|
private _itemsElement;
|
|
@@ -365,16 +499,21 @@ declare class PacemWidgetFetchElement extends PacemBearerWidgetElement {
|
|
|
365
499
|
private _onsuccess;
|
|
366
500
|
private _onresult;
|
|
367
501
|
get _parameters(): PacemWidgetFetchParameterElement[];
|
|
502
|
+
/** Triggers the request against `endpoint`/`url`, provided all of the endpoint's required parameters are attached and populated; otherwise does nothing. */
|
|
368
503
|
fetch(): Promise<Response>;
|
|
369
504
|
viewActivatedCallback(): void;
|
|
370
505
|
propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
|
|
371
506
|
private _mergeEndpoint;
|
|
372
507
|
}
|
|
373
508
|
|
|
509
|
+
/** A single, named fetch parameter nested under a {@link PacemWidgetFetchElement}; setting `value` re-triggers the owning fetcher's `fetch()`. */
|
|
374
510
|
declare class PacemWidgetFetchParameterElement extends PacemEventTarget {
|
|
375
511
|
private _fetcher;
|
|
512
|
+
/** Gets or sets whether the owning endpoint requires this parameter. */
|
|
376
513
|
required: boolean;
|
|
514
|
+
/** Gets or sets the parameter's name, matched against the endpoint's declared parameters. */
|
|
377
515
|
name: string;
|
|
516
|
+
/** Gets or sets the parameter's value. */
|
|
378
517
|
value: any;
|
|
379
518
|
propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
|
|
380
519
|
viewActivatedCallback(): void;
|
|
@@ -388,12 +527,16 @@ declare class PacemWidgetPickerElement extends PacemCompositeWidgetElement {
|
|
|
388
527
|
private _dragDrop;
|
|
389
528
|
}
|
|
390
529
|
|
|
530
|
+
/** UI widget rendering a plain (optionally expression-bound) piece of text via an inner `${P}-text`. */
|
|
391
531
|
declare class PacemWidgetTextElement extends PacemUiWidgetElement {
|
|
392
532
|
constructor();
|
|
533
|
+
/** Gets or sets the text displayed by the widget. */
|
|
393
534
|
text: string;
|
|
394
535
|
}
|
|
395
536
|
|
|
537
|
+
/** Floating toolbar (edit/permissions/remove buttons), shown by a {@link PacemWidgetElement}'s balloon while `editing`, that opens the widget's core/permissions edit forms. */
|
|
396
538
|
declare class PacemWidgetToolbarElement extends Components_3.PacemElement {
|
|
539
|
+
/** Gets or sets the widget this toolbar acts upon. */
|
|
397
540
|
target: PacemWidgetElement;
|
|
398
541
|
private _toolbar;
|
|
399
542
|
private _btnEdit;
|
|
@@ -411,22 +554,32 @@ declare class PacemWidgetToolbarElement extends Components_3.PacemElement {
|
|
|
411
554
|
private _popoutJustInCase;
|
|
412
555
|
}
|
|
413
556
|
|
|
557
|
+
/** Non-visual helper widget, reserved for translation-related composition (no widget-specific behavior beyond {@link PacemWidgetElement}). */
|
|
414
558
|
declare class PacemWidgetTranslatorElement extends PacemWidgetElement {
|
|
415
559
|
}
|
|
416
560
|
|
|
561
|
+
/** A resource carrying a list of {@link Permission} rules, checkable via the {@link Permissible} static helpers. */
|
|
417
562
|
declare interface Permissible {
|
|
418
563
|
permissions: Permission[];
|
|
419
564
|
}
|
|
420
565
|
|
|
566
|
+
/** Static, claim-based authorization checks (edit/read/add/delete/translate) against a {@link Permissible} resource's {@link Permission} list. */
|
|
421
567
|
declare class Permissible {
|
|
568
|
+
/** Gets whether `claims` grants edit (update) permission on `resource`. */
|
|
422
569
|
static canEdit(claims: Claims, resource: Permissible): boolean;
|
|
570
|
+
/** Gets whether `claims` grants read permission on `resource`. */
|
|
423
571
|
static canRead(claims: Claims, resource: Permissible): boolean;
|
|
572
|
+
/** Gets whether `claims` grants add (create) permission on `resource`. */
|
|
424
573
|
static canAdd(claims: Claims, resource: Permissible): boolean;
|
|
574
|
+
/** Gets whether `claims` grants delete permission on `resource`. */
|
|
425
575
|
static canDelete(claims: Claims, resource: Permissible): boolean;
|
|
576
|
+
/** Gets whether `claims` grants translate permission on `resource`. */
|
|
426
577
|
static canTranslate(claims: Claims, resource: Permissible): boolean;
|
|
578
|
+
/** Returns whether `claims` satisfies `predicate` for at least one of `resource.permissions`; when `resource.permissions` is empty, access is unrestricted (returns `true`). */
|
|
427
579
|
private static _canDoSomethingToResource;
|
|
428
580
|
}
|
|
429
581
|
|
|
582
|
+
/** A single claim-based authorization rule attached to a {@link Permissible} resource: users holding claim `claimType`/`claimValue` are granted the flagged operations. */
|
|
430
583
|
declare interface Permission {
|
|
431
584
|
claimType: string;
|
|
432
585
|
claimValue: string;
|
|
@@ -437,6 +590,7 @@ declare interface Permission {
|
|
|
437
590
|
delete: boolean;
|
|
438
591
|
}
|
|
439
592
|
|
|
593
|
+
/** Dispatched to request permission-editing UI for the given {@link Permissible} resource. */
|
|
440
594
|
declare class PermissionEditEvent extends CustomEvent<Permissible> {
|
|
441
595
|
constructor(permissible: Permissible);
|
|
442
596
|
}
|
|
@@ -449,15 +603,29 @@ declare interface StorageCache {
|
|
|
449
603
|
removeProperty: (name: string) => void;
|
|
450
604
|
}
|
|
451
605
|
|
|
606
|
+
/**
|
|
607
|
+
* Loads an OpenApi manifest (via the underlying {@link Scaffolding.OpenApi.OpenApiParser}) and eagerly
|
|
608
|
+
* enriches every endpoint's request/response schemas into scaffolding-ready {@link Scaffolding.OpenApi.DataField}
|
|
609
|
+
* metadata (fetched from each schema's absolute-url definition key, recursively for nested `$ref`s), optionally
|
|
610
|
+
* caching the per-url metadata fetches through `cache`.
|
|
611
|
+
*/
|
|
452
612
|
declare class SwaggerCmsParser {
|
|
453
613
|
private _openApi;
|
|
454
614
|
constructor(_openApi?: Scaffolding.OpenApi.OpenApiParser);
|
|
615
|
+
/** Gets or sets the storage used to cache per-url metadata fetches; when unset, metadata is re-fetched on every `load`. */
|
|
455
616
|
cache: StorageCache;
|
|
617
|
+
/**
|
|
618
|
+
* Loads the OpenApi manifest at `url` and enriches every endpoint's request/response schemas with their
|
|
619
|
+
* fetched field metadata (see `_enrichSchemas`).
|
|
620
|
+
* @param url The OpenApi (swagger) json configuration's url.
|
|
621
|
+
* @param headers Optional HTTP headers for both the manifest and the per-schema metadata fetches.
|
|
622
|
+
*/
|
|
456
623
|
load(url: string, headers?: {
|
|
457
624
|
[name: string]: string;
|
|
458
625
|
}): Promise<Scaffolding.OpenApi.ApiManifest>;
|
|
459
626
|
private _enrichSchemas;
|
|
460
627
|
private _cachedMetadataUrls;
|
|
628
|
+
/** Removes from `cache` every metadata entry fetched by this parser so far. */
|
|
461
629
|
clearCache(): void;
|
|
462
630
|
/**
|
|
463
631
|
*
|
|
@@ -467,17 +635,23 @@ declare class SwaggerCmsParser {
|
|
|
467
635
|
private _fetchMetadata;
|
|
468
636
|
}
|
|
469
637
|
|
|
638
|
+
/** Contract for a CMS widget: its scaffolding metadata, editing state, permissions and identity. Implemented by {@link PacemWidgetElement}. */
|
|
470
639
|
declare interface Widget extends Permissible {
|
|
640
|
+
/** Gets or sets the scaffolding metadata describing the widget's own editable properties. */
|
|
471
641
|
metadata: Scaffolding.TypeMetadata;
|
|
642
|
+
/** Gets or sets the scaffolding metadata describing the widget's permission-editing form. */
|
|
472
643
|
permissionMetadata: Scaffolding.TypeMetadata;
|
|
473
644
|
/** Gets or sets whether the widget is currently in editing mode. */
|
|
474
645
|
editing: boolean;
|
|
475
646
|
/** Gets or sets whether thet widget might be edited or not. */
|
|
476
647
|
editable: boolean;
|
|
648
|
+
/** Gets or sets the widget's display tag/name, shown by its toolbar. */
|
|
477
649
|
tag: string;
|
|
650
|
+
/** @readonly Gets the widget's DOM id. */
|
|
478
651
|
readonly id: string;
|
|
479
652
|
}
|
|
480
653
|
|
|
654
|
+
/** Static lookup helper for {@link PacemWidgetElement} instances in the current document. */
|
|
481
655
|
declare class Widget {
|
|
482
656
|
/**
|
|
483
657
|
* Utility method for widget gathering.
|
|
@@ -486,12 +660,14 @@ declare class Widget {
|
|
|
486
660
|
static findAll(predicate?: (w: PacemWidgetElement) => boolean): PacemWidgetElement[];
|
|
487
661
|
}
|
|
488
662
|
|
|
663
|
+
/** Dispatched by a {@link PacemCompositeWidgetElement} right after a child widget is successfully registered into it. */
|
|
489
664
|
declare class WidgetRegisterEvent extends CustomEvent<PacemWidgetElement> {
|
|
490
665
|
constructor(item: PacemWidgetElement, eventInit?: EventInit);
|
|
491
666
|
}
|
|
492
667
|
|
|
493
668
|
declare const WidgetRegisterEventName = "widgetregister";
|
|
494
669
|
|
|
670
|
+
/** Dispatched by a {@link PacemCompositeWidgetElement} right after a child widget is unregistered from it. */
|
|
495
671
|
declare class WidgetUnregisterEvent extends CustomEvent<PacemWidgetElement> {
|
|
496
672
|
constructor(item: PacemWidgetElement, eventInit?: EventInit);
|
|
497
673
|
}
|