@umbraco-cms/backoffice 14.0.0-40e04294 → 14.0.0-45828375
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-cms/apps/app/app.element.js +0 -3
- package/dist-cms/assets/lang/da-dk.js +3 -0
- package/dist-cms/assets/lang/da-dk.ts +3 -0
- package/dist-cms/assets/lang/en-us.js +21 -18
- package/dist-cms/assets/lang/en-us.ts +21 -18
- package/dist-cms/custom-elements.json +149 -19
- package/dist-cms/mocks/browser-handlers.js +1 -1
- package/dist-cms/mocks/data/entity.data.d.ts +1 -1
- package/dist-cms/mocks/data/entity.data.js +1 -9
- package/dist-cms/mocks/data/media.data.d.ts +2 -1
- package/dist-cms/mocks/data/media.data.js +11 -0
- package/dist-cms/mocks/data/user-group.data.d.ts +17 -0
- package/dist-cms/mocks/data/user-group.data.js +61 -0
- package/dist-cms/mocks/data/user.data.d.ts +15 -0
- package/dist-cms/mocks/data/{users.data.js → user.data.js} +27 -41
- package/dist-cms/mocks/handlers/dictionary.handlers.js +2 -2
- package/dist-cms/mocks/handlers/media.handlers.js +8 -0
- package/dist-cms/mocks/handlers/partial-views.handlers.js +3 -3
- package/dist-cms/mocks/handlers/user-group/collection.handlers.d.ts +1 -0
- package/dist-cms/mocks/handlers/user-group/collection.handlers.js +10 -0
- package/dist-cms/mocks/handlers/user-group/detail.handlers.d.ts +1 -0
- package/dist-cms/mocks/handlers/user-group/detail.handlers.js +37 -0
- package/dist-cms/mocks/handlers/user-group/index.js +4 -0
- package/dist-cms/mocks/handlers/user-group/item.handlers.d.ts +1 -0
- package/dist-cms/mocks/handlers/user-group/item.handlers.js +13 -0
- package/dist-cms/mocks/handlers/user-group/slug.d.ts +1 -0
- package/dist-cms/mocks/handlers/user-group/slug.js +1 -0
- package/dist-cms/mocks/handlers/user.handlers.js +15 -1
- package/dist-cms/packages/core/components/input-list-base/input-list-base.js +1 -1
- package/dist-cms/packages/core/components/input-section/input-section.element.d.ts +2 -2
- package/dist-cms/packages/core/components/input-section/input-section.element.js +5 -5
- package/dist-cms/packages/core/extension-registry/conditions/types.d.ts +3 -2
- package/dist-cms/packages/core/extension-registry/models/index.d.ts +5 -1
- package/dist-cms/packages/core/extension-registry/models/index.js +2 -0
- package/dist-cms/packages/core/extension-registry/models/user-granular-permission.model.d.ts +8 -0
- package/dist-cms/packages/core/extension-registry/models/user-granular-permission.model.js +1 -0
- package/dist-cms/packages/core/extension-registry/models/user-permission.model.d.ts +11 -0
- package/dist-cms/packages/core/extension-registry/models/user-permission.model.js +1 -0
- package/dist-cms/packages/core/modal/common/entity-user-permission-settings/entity-user-permission-settings-modal.element.d.ts +19 -0
- package/dist-cms/packages/core/modal/common/entity-user-permission-settings/entity-user-permission-settings-modal.element.js +97 -0
- package/dist-cms/packages/core/modal/common/manifests.js +6 -0
- package/dist-cms/packages/core/modal/common/tree-picker/tree-picker-modal.element.js +5 -3
- package/dist-cms/packages/core/modal/token/entity-user-permission-settings-modal.token.d.ts +7 -0
- package/dist-cms/packages/core/modal/token/entity-user-permission-settings-modal.token.js +4 -0
- package/dist-cms/packages/core/modal/token/index.d.ts +1 -0
- package/dist-cms/packages/core/modal/token/index.js +1 -0
- package/dist-cms/packages/core/picker-input/picker-input.context.js +1 -3
- package/dist-cms/packages/core/tree/tree.context.js +3 -2
- package/dist-cms/packages/documents/documents/components/index.d.ts +1 -0
- package/dist-cms/packages/documents/documents/components/index.js +1 -0
- package/dist-cms/packages/documents/documents/components/input-document/input-document.context.d.ts +6 -0
- package/dist-cms/packages/documents/documents/components/input-document/input-document.context.js +7 -0
- package/dist-cms/packages/documents/documents/components/input-document/input-document.element.d.ts +7 -12
- package/dist-cms/packages/documents/documents/components/input-document/input-document.element.js +51 -64
- package/dist-cms/packages/documents/documents/components/input-document-granular-permission/input-document-granular-permission.element.d.ts +23 -0
- package/dist-cms/packages/documents/documents/components/input-document-granular-permission/input-document-granular-permission.element.js +102 -0
- package/dist-cms/packages/documents/documents/entity-actions/create/manifests.js +9 -0
- package/dist-cms/packages/documents/documents/entity-actions/manifests.js +1 -1
- package/dist-cms/packages/documents/documents/entity-actions/permissions.action.d.ts +2 -1
- package/dist-cms/packages/documents/documents/entity-actions/permissions.action.js +22 -2
- package/dist-cms/packages/documents/documents/index.d.ts +2 -0
- package/dist-cms/packages/documents/documents/index.js +2 -0
- package/dist-cms/packages/documents/documents/manifests.d.ts +4 -0
- package/dist-cms/packages/documents/documents/manifests.js +2 -0
- package/dist-cms/packages/documents/documents/recycle-bin/entity-action/manifests.d.ts +4 -0
- package/dist-cms/packages/documents/documents/recycle-bin/entity-action/manifests.js +6 -0
- package/dist-cms/packages/documents/documents/recycle-bin/manifests.d.ts +4 -0
- package/dist-cms/packages/documents/documents/repository/document.repository.js +4 -4
- package/dist-cms/packages/documents/documents/repository/manifests.d.ts +3 -2
- package/dist-cms/packages/documents/documents/repository/manifests.js +9 -1
- package/dist-cms/packages/documents/documents/user-permissions/index.d.ts +1 -0
- package/dist-cms/packages/documents/documents/user-permissions/index.js +1 -0
- package/dist-cms/packages/documents/documents/user-permissions/manifests.d.ts +19 -0
- package/dist-cms/packages/documents/documents/user-permissions/manifests.js +196 -0
- package/dist-cms/packages/documents/manifests.d.ts +4 -0
- package/dist-cms/packages/media/manifests.d.ts +2 -1
- package/dist-cms/packages/media/manifests.js +1 -0
- package/dist-cms/packages/media/media/components/index.d.ts +1 -0
- package/dist-cms/packages/media/media/components/index.js +1 -0
- package/dist-cms/packages/media/media/components/input-media/input-media.context.d.ts +6 -0
- package/dist-cms/packages/media/media/components/input-media/input-media.context.js +7 -0
- package/dist-cms/packages/media/media/components/input-media/input-media.element.d.ts +7 -15
- package/dist-cms/packages/media/media/components/input-media/input-media.element.js +50 -72
- package/dist-cms/packages/media/media/index.d.ts +2 -0
- package/dist-cms/packages/media/media/index.js +1 -1
- package/dist-cms/packages/media/media/manifests.d.ts +1 -1
- package/dist-cms/packages/media/media/manifests.js +2 -0
- package/dist-cms/packages/media/media/repository/manifests.d.ts +3 -2
- package/dist-cms/packages/media/media/repository/manifests.js +9 -1
- package/dist-cms/packages/media/media/repository/media-item.store.d.ts +20 -0
- package/dist-cms/packages/media/media/repository/media-item.store.js +23 -0
- package/dist-cms/packages/media/media/repository/media.repository.d.ts +6 -0
- package/dist-cms/packages/media/media/repository/media.repository.js +22 -0
- package/dist-cms/packages/media/media/repository/sources/media-item.server.data.d.ts +24 -0
- package/dist-cms/packages/media/media/repository/sources/media-item.server.data.js +31 -0
- package/dist-cms/packages/media/media/user-permissions/index.d.ts +1 -0
- package/dist-cms/packages/media/media/user-permissions/index.js +1 -0
- package/dist-cms/packages/media/media/user-permissions/manifests.d.ts +4 -0
- package/dist-cms/packages/media/media/user-permissions/manifests.js +27 -0
- package/dist-cms/packages/users/current-user/conditions/index.d.ts +1 -0
- package/dist-cms/packages/users/current-user/conditions/index.js +1 -0
- package/dist-cms/packages/users/current-user/conditions/user-permission.condition.d.ts +18 -0
- package/dist-cms/packages/users/current-user/conditions/user-permission.condition.js +23 -0
- package/dist-cms/packages/users/current-user/index.d.ts +1 -0
- package/dist-cms/packages/users/current-user/index.js +1 -0
- package/dist-cms/packages/users/current-user/manifests.js +7 -1
- package/dist-cms/packages/users/current-user/modals/current-user/current-user-modal.element.js +7 -7
- package/dist-cms/packages/users/index.d.ts +4 -2
- package/dist-cms/packages/users/index.js +4 -2
- package/dist-cms/packages/users/manifests.d.ts +2 -0
- package/dist-cms/packages/users/manifests.js +3 -0
- package/dist-cms/packages/users/user-groups/collection/user-group-collection-header.element.js +2 -2
- package/dist-cms/packages/users/user-groups/collection/user-group-collection-view.element.js +6 -6
- package/dist-cms/packages/users/user-groups/components/index.d.ts +1 -0
- package/dist-cms/packages/users/user-groups/components/index.js +1 -0
- package/dist-cms/packages/users/user-groups/entity-actions/manifests.d.ts +2 -0
- package/dist-cms/packages/users/user-groups/entity-actions/manifests.js +19 -0
- package/dist-cms/packages/users/user-groups/index.d.ts +2 -0
- package/dist-cms/packages/users/user-groups/index.js +2 -0
- package/dist-cms/packages/users/user-groups/manifests.d.ts +1 -1
- package/dist-cms/packages/users/user-groups/manifests.js +2 -0
- package/dist-cms/packages/users/user-groups/workspace/components/user-group-default-permission-list.element.d.ts +16 -0
- package/dist-cms/packages/users/user-groups/workspace/components/user-group-default-permission-list.element.js +69 -0
- package/dist-cms/packages/users/user-groups/workspace/components/user-group-granular-permission-list.element.d.ts +14 -0
- package/dist-cms/packages/users/user-groups/workspace/components/user-group-granular-permission-list.element.js +31 -0
- package/dist-cms/packages/users/user-groups/workspace/user-group-workspace-editor.element.d.ts +2 -0
- package/dist-cms/packages/users/user-groups/workspace/user-group-workspace-editor.element.js +57 -56
- package/dist-cms/packages/users/user-groups/workspace/user-group-workspace.context.d.ts +12 -0
- package/dist-cms/packages/users/user-groups/workspace/user-group-workspace.context.js +20 -0
- package/dist-cms/packages/users/user-groups/workspace/user-group-workspace.element.js +1 -1
- package/dist-cms/packages/users/users/collection/user-collection-header.element.js +18 -11
- package/dist-cms/packages/users/users/collection/views/grid/user-collection-grid-view.element.js +6 -6
- package/dist-cms/packages/users/users/collection/views/table/column-layouts/status/user-table-status-column-layout.element.js +3 -3
- package/dist-cms/packages/users/users/components/index.d.ts +3 -0
- package/dist-cms/packages/users/users/components/index.js +3 -0
- package/dist-cms/packages/users/users/components/user-input/user-input.element.js +2 -2
- package/dist-cms/packages/users/users/components/user-permission-setting/user-permission-setting.element.d.ts +15 -0
- package/dist-cms/packages/users/users/components/user-permission-setting/user-permission-setting.element.js +66 -0
- package/dist-cms/packages/users/users/index.d.ts +2 -0
- package/dist-cms/packages/users/users/index.js +2 -0
- package/dist-cms/packages/users/users/modals/user-picker/user-picker-modal.element.d.ts +3 -1
- package/dist-cms/packages/users/users/modals/user-picker/user-picker-modal.element.js +20 -25
- package/dist-cms/packages/users/users/repository/index.d.ts +1 -0
- package/dist-cms/packages/users/users/repository/index.js +1 -0
- package/dist-cms/packages/users/users/repository/user.repository.js +1 -1
- package/dist-cms/packages/users/users/workspace/user-workspace-editor.element.js +73 -56
- package/dist-cms/packages/users/utils.d.ts +5 -2
- package/dist-cms/packages/users/utils.js +14 -14
- package/dist-cms/shared/auth/auth-flow.d.ts +0 -4
- package/dist-cms/shared/auth/auth-flow.js +6 -25
- package/dist-cms/shared/repository/repository-items.manager.js +5 -0
- package/dist-cms/shared/umb-events/index.d.ts +1 -0
- package/dist-cms/shared/umb-events/index.js +1 -0
- package/dist-cms/shared/umb-events/selected.event.d.ts +3 -0
- package/dist-cms/shared/umb-events/selected.event.js +6 -0
- package/dist-cms/tsconfig.build.tsbuildinfo +1 -1
- package/dist-cms/umbraco-package-schema.json +154 -0
- package/dist-cms/vscode-html-custom-data.json +66 -18
- package/package.json +1 -1
- package/dist-cms/mocks/data/user-groups.data.d.ts +0 -9
- package/dist-cms/mocks/data/user-groups.data.js +0 -21
- package/dist-cms/mocks/data/users.data.d.ts +0 -16
- package/dist-cms/mocks/handlers/user-group.handlers.js +0 -17
- /package/dist-cms/mocks/handlers/{user-group.handlers.d.ts → user-group/index.d.ts} +0 -0
|
@@ -33,3 +33,4 @@ export * from './data-type-picker-modal.token.js';
|
|
|
33
33
|
export * from './workspace-modal.token.js';
|
|
34
34
|
export * from './data-type-picker-flow-modal.token.js';
|
|
35
35
|
export * from './data-type-picker-flow-data-type-picker-modal.token.js';
|
|
36
|
+
export * from './entity-user-permission-settings-modal.token.js';
|
|
@@ -48,9 +48,6 @@ export class UmbPickerInputContext {
|
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
50
|
async requestRemoveItem(unique) {
|
|
51
|
-
await this.#init;
|
|
52
|
-
if (!this.repository)
|
|
53
|
-
throw new Error('Repository is not initialized');
|
|
54
51
|
// TODO: id won't always be available on the model, so we need to get the unique property from somewhere. Maybe the repository?
|
|
55
52
|
const item = this.#itemManager.getItems().find((item) => this.#getUnique(item) === unique);
|
|
56
53
|
if (!item)
|
|
@@ -67,5 +64,6 @@ export class UmbPickerInputContext {
|
|
|
67
64
|
#removeItem(unique) {
|
|
68
65
|
const newSelection = this.getSelection().filter((value) => value !== unique);
|
|
69
66
|
this.setSelection(newSelection);
|
|
67
|
+
this.host.dispatchEvent(new UmbChangeEvent());
|
|
70
68
|
}
|
|
71
69
|
}
|
|
@@ -3,6 +3,7 @@ import { UmbBooleanState } from '../../../libs/observable-api/index.js';
|
|
|
3
3
|
import { UmbBaseController } from '../../../libs/controller-api/index.js';
|
|
4
4
|
import { createExtensionClass } from '../../../libs/extension-api/index.js';
|
|
5
5
|
import { UmbSelectionManagerBase } from '../../../shared/utils/index.js';
|
|
6
|
+
import { UmbSelectedEvent } from '../../../shared/umb-events/index.js';
|
|
6
7
|
export class UmbTreeContextBase extends UmbBaseController {
|
|
7
8
|
#selectionManager;
|
|
8
9
|
#selectable;
|
|
@@ -62,11 +63,11 @@ export class UmbTreeContextBase extends UmbBaseController {
|
|
|
62
63
|
if (!this.getSelectable())
|
|
63
64
|
return;
|
|
64
65
|
this.#selectionManager.select(unique);
|
|
65
|
-
this._host.getHostElement().dispatchEvent(new
|
|
66
|
+
this._host.getHostElement().dispatchEvent(new UmbSelectedEvent());
|
|
66
67
|
}
|
|
67
68
|
deselect(unique) {
|
|
68
69
|
this.#selectionManager.deselect(unique);
|
|
69
|
-
this._host.getHostElement().dispatchEvent(new
|
|
70
|
+
this._host.getHostElement().dispatchEvent(new UmbSelectedEvent());
|
|
70
71
|
}
|
|
71
72
|
async requestTreeRoot() {
|
|
72
73
|
await this.#init;
|
package/dist-cms/packages/documents/documents/components/input-document/input-document.context.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { UmbPickerInputContext } from '../../../../core/picker-input/index.js';
|
|
2
|
+
import { UmbControllerHostElement } from '../../../../../libs/controller-api/index.js';
|
|
3
|
+
import { DocumentItemResponseModel } from '../../../../../external/backend-api/index.js';
|
|
4
|
+
export declare class UmbDocumentPickerContext extends UmbPickerInputContext<DocumentItemResponseModel> {
|
|
5
|
+
constructor(host: UmbControllerHostElement);
|
|
6
|
+
}
|
package/dist-cms/packages/documents/documents/components/input-document/input-document.context.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { UmbPickerInputContext } from '../../../../core/picker-input/index.js';
|
|
2
|
+
import { UMB_DOCUMENT_PICKER_MODAL } from '../../../../core/modal/index.js';
|
|
3
|
+
export class UmbDocumentPickerContext extends UmbPickerInputContext {
|
|
4
|
+
constructor(host) {
|
|
5
|
+
super(host, 'Umb.Repository.Document', UMB_DOCUMENT_PICKER_MODAL);
|
|
6
|
+
}
|
|
7
|
+
}
|
package/dist-cms/packages/documents/documents/components/input-document/input-document.element.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { UmbLitElement } from '../../../../../shared/lit-element/index.js';
|
|
2
2
|
declare const UmbInputDocumentElement_base: (new (...args: any[]) => import("../../../../../external/uui/index.js").FormControlMixinInterface) & typeof UmbLitElement;
|
|
3
3
|
export declare class UmbInputDocumentElement extends UmbInputDocumentElement_base {
|
|
4
|
+
#private;
|
|
4
5
|
/**
|
|
5
6
|
* This is a minimum amount of selected items in this input.
|
|
6
7
|
* @type {number}
|
|
7
8
|
* @attr
|
|
8
|
-
* @default
|
|
9
|
+
* @default 0
|
|
9
10
|
*/
|
|
10
|
-
min
|
|
11
|
+
get min(): number;
|
|
12
|
+
set min(value: number);
|
|
11
13
|
/**
|
|
12
14
|
* Min validation message.
|
|
13
15
|
* @type {boolean}
|
|
@@ -19,9 +21,10 @@ export declare class UmbInputDocumentElement extends UmbInputDocumentElement_bas
|
|
|
19
21
|
* This is a maximum amount of selected items in this input.
|
|
20
22
|
* @type {number}
|
|
21
23
|
* @attr
|
|
22
|
-
* @default
|
|
24
|
+
* @default Infinity
|
|
23
25
|
*/
|
|
24
|
-
max
|
|
26
|
+
get max(): number;
|
|
27
|
+
set max(value: number);
|
|
25
28
|
/**
|
|
26
29
|
* Max validation message.
|
|
27
30
|
* @type {boolean}
|
|
@@ -29,20 +32,12 @@ export declare class UmbInputDocumentElement extends UmbInputDocumentElement_bas
|
|
|
29
32
|
* @default
|
|
30
33
|
*/
|
|
31
34
|
maxMessage: string;
|
|
32
|
-
private _selectedIds;
|
|
33
35
|
get selectedIds(): Array<string>;
|
|
34
36
|
set selectedIds(ids: Array<string>);
|
|
35
37
|
set value(idsString: string);
|
|
36
38
|
private _items?;
|
|
37
|
-
private _modalContext?;
|
|
38
|
-
private _documentStore?;
|
|
39
|
-
private _pickedItemsObserver?;
|
|
40
39
|
constructor();
|
|
41
40
|
protected getFormElement(): undefined;
|
|
42
|
-
private _observePickedDocuments;
|
|
43
|
-
private _openPicker;
|
|
44
|
-
private _removeItem;
|
|
45
|
-
private _setSelection;
|
|
46
41
|
render(): import("lit-html").TemplateResult<1>;
|
|
47
42
|
private _renderItem;
|
|
48
43
|
static styles: import("@lit/reactive-element/css-tag.js").CSSResult[];
|
package/dist-cms/packages/documents/documents/components/input-document/input-document.element.js
CHANGED
|
@@ -4,25 +4,46 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import {
|
|
8
|
-
import { css, html,
|
|
7
|
+
import { UmbDocumentPickerContext } from './input-document.context.js';
|
|
8
|
+
import { css, html, customElement, property, state, ifDefined } from '../../../../../external/lit/index.js';
|
|
9
9
|
import { FormControlMixin } from '../../../../../external/uui/index.js';
|
|
10
|
-
import { UMB_MODAL_MANAGER_CONTEXT_TOKEN, UMB_CONFIRM_MODAL, UMB_DOCUMENT_PICKER_MODAL, } from '../../../../core/modal/index.js';
|
|
11
10
|
import { UmbLitElement } from '../../../../../shared/lit-element/index.js';
|
|
12
11
|
export let UmbInputDocumentElement = class UmbInputDocumentElement extends FormControlMixin(UmbLitElement) {
|
|
12
|
+
/**
|
|
13
|
+
* This is a minimum amount of selected items in this input.
|
|
14
|
+
* @type {number}
|
|
15
|
+
* @attr
|
|
16
|
+
* @default 0
|
|
17
|
+
*/
|
|
18
|
+
get min() {
|
|
19
|
+
return this.#pickerContext.min;
|
|
20
|
+
}
|
|
21
|
+
set min(value) {
|
|
22
|
+
this.#pickerContext.min = value;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* This is a maximum amount of selected items in this input.
|
|
26
|
+
* @type {number}
|
|
27
|
+
* @attr
|
|
28
|
+
* @default Infinity
|
|
29
|
+
*/
|
|
30
|
+
get max() {
|
|
31
|
+
return this.#pickerContext.max;
|
|
32
|
+
}
|
|
33
|
+
set max(value) {
|
|
34
|
+
this.#pickerContext.max = value;
|
|
35
|
+
}
|
|
13
36
|
get selectedIds() {
|
|
14
|
-
return this.
|
|
37
|
+
return this.#pickerContext.getSelection();
|
|
15
38
|
}
|
|
16
39
|
set selectedIds(ids) {
|
|
17
|
-
this.
|
|
18
|
-
super.value = ids.join(',');
|
|
19
|
-
this._observePickedDocuments();
|
|
40
|
+
this.#pickerContext.setSelection(ids);
|
|
20
41
|
}
|
|
21
42
|
set value(idsString) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
43
|
+
// Its with full purpose we don't call super.value, as thats being handled by the observation of the context selection.
|
|
44
|
+
this.selectedIds = idsString.split(/[ ,]+/);
|
|
25
45
|
}
|
|
46
|
+
#pickerContext;
|
|
26
47
|
constructor() {
|
|
27
48
|
super();
|
|
28
49
|
/**
|
|
@@ -39,69 +60,35 @@ export let UmbInputDocumentElement = class UmbInputDocumentElement extends FormC
|
|
|
39
60
|
* @default
|
|
40
61
|
*/
|
|
41
62
|
this.maxMessage = 'This field exceeds the allowed amount of items';
|
|
42
|
-
|
|
43
|
-
this.
|
|
44
|
-
this.addValidator('
|
|
45
|
-
this.
|
|
46
|
-
this.
|
|
47
|
-
this._documentStore = instance;
|
|
48
|
-
this._observePickedDocuments();
|
|
49
|
-
});
|
|
50
|
-
this.consumeContext(UMB_MODAL_MANAGER_CONTEXT_TOKEN, (instance) => {
|
|
51
|
-
this._modalContext = instance;
|
|
52
|
-
});
|
|
63
|
+
this.#pickerContext = new UmbDocumentPickerContext(this);
|
|
64
|
+
this.addValidator('rangeUnderflow', () => this.minMessage, () => !!this.min && this.#pickerContext.getSelection().length < this.min);
|
|
65
|
+
this.addValidator('rangeOverflow', () => this.maxMessage, () => !!this.max && this.#pickerContext.getSelection().length > this.max);
|
|
66
|
+
this.observe(this.#pickerContext.selection, (selection) => (super.value = selection.join(',')));
|
|
67
|
+
this.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems));
|
|
53
68
|
}
|
|
54
69
|
getFormElement() {
|
|
55
70
|
return undefined;
|
|
56
71
|
}
|
|
57
|
-
_observePickedDocuments() {
|
|
58
|
-
this._pickedItemsObserver?.destroy();
|
|
59
|
-
if (!this._documentStore)
|
|
60
|
-
return;
|
|
61
|
-
// TODO: consider changing this to the list data endpoint when it is available
|
|
62
|
-
this._pickedItemsObserver = this.observe(this._documentStore.items(this._selectedIds), (items) => {
|
|
63
|
-
this._items = items;
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
_openPicker() {
|
|
67
|
-
// We send a shallow copy(good enough as its just an array of ids) of our this._selectedIds, as we don't want the modal to manipulate our data:
|
|
68
|
-
const modalContext = this._modalContext?.open(UMB_DOCUMENT_PICKER_MODAL, {
|
|
69
|
-
multiple: this.max === 1 ? false : true,
|
|
70
|
-
selection: [...this._selectedIds],
|
|
71
|
-
});
|
|
72
|
-
modalContext?.onSubmit().then(({ selection }) => {
|
|
73
|
-
this._setSelection(selection);
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
async _removeItem(item) {
|
|
77
|
-
const modalContext = this._modalContext?.open(UMB_CONFIRM_MODAL, {
|
|
78
|
-
color: 'danger',
|
|
79
|
-
headline: `Remove ${item.name}?`,
|
|
80
|
-
content: 'Are you sure you want to remove this item',
|
|
81
|
-
confirmLabel: 'Remove',
|
|
82
|
-
});
|
|
83
|
-
await modalContext?.onSubmit();
|
|
84
|
-
const newSelection = this._selectedIds.filter((value) => value !== item.id);
|
|
85
|
-
this._setSelection(newSelection);
|
|
86
|
-
}
|
|
87
|
-
_setSelection(newSelection) {
|
|
88
|
-
this.selectedIds = newSelection;
|
|
89
|
-
this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true }));
|
|
90
|
-
}
|
|
91
72
|
render() {
|
|
92
73
|
return html `
|
|
93
|
-
|
|
94
|
-
<uui-button id="add-button" look="placeholder" @click=${this.
|
|
74
|
+
<uui-ref-list>${this._items?.map((item) => this._renderItem(item))}</uui-ref-list>
|
|
75
|
+
<uui-button id="add-button" look="placeholder" @click=${() => this.#pickerContext.openPicker()} label="open"
|
|
76
|
+
>Add</uui-button
|
|
77
|
+
>
|
|
95
78
|
`;
|
|
96
79
|
}
|
|
97
80
|
_renderItem(item) {
|
|
98
|
-
|
|
99
|
-
|
|
81
|
+
if (!item.id)
|
|
82
|
+
return;
|
|
100
83
|
return html `
|
|
101
|
-
<uui-ref-node name=${ifDefined(item.name
|
|
102
|
-
|
|
84
|
+
<uui-ref-node name=${ifDefined(item.name)} detail=${ifDefined(item.id)}>
|
|
85
|
+
<!-- TODO: implement is trashed <uui-tag size="s" slot="tag" color="danger">Trashed</uui-tag> -->
|
|
103
86
|
<uui-action-bar slot="actions">
|
|
104
|
-
<uui-button
|
|
87
|
+
<uui-button
|
|
88
|
+
@click=${() => this.#pickerContext.requestRemoveItem(item.id)}
|
|
89
|
+
label="Remove document ${item.name}"
|
|
90
|
+
>Remove</uui-button
|
|
91
|
+
>
|
|
105
92
|
</uui-action-bar>
|
|
106
93
|
</uui-ref-node>
|
|
107
94
|
`;
|
|
@@ -116,13 +103,13 @@ export let UmbInputDocumentElement = class UmbInputDocumentElement extends FormC
|
|
|
116
103
|
};
|
|
117
104
|
__decorate([
|
|
118
105
|
property({ type: Number })
|
|
119
|
-
], UmbInputDocumentElement.prototype, "min",
|
|
106
|
+
], UmbInputDocumentElement.prototype, "min", null);
|
|
120
107
|
__decorate([
|
|
121
108
|
property({ type: String, attribute: 'min-message' })
|
|
122
109
|
], UmbInputDocumentElement.prototype, "minMessage", void 0);
|
|
123
110
|
__decorate([
|
|
124
111
|
property({ type: Number })
|
|
125
|
-
], UmbInputDocumentElement.prototype, "max",
|
|
112
|
+
], UmbInputDocumentElement.prototype, "max", null);
|
|
126
113
|
__decorate([
|
|
127
114
|
property({ type: String, attribute: 'min-message' })
|
|
128
115
|
], UmbInputDocumentElement.prototype, "maxMessage", void 0);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { PropertyValueMap } from '../../../../../external/lit/index.js';
|
|
2
|
+
import { UmbLitElement } from '../../../../../shared/lit-element/index.js';
|
|
3
|
+
declare const UmbInputDocumentGranularPermissionElement_base: (new (...args: any[]) => import("../../../../../external/uui/index.js").FormControlMixinInterface) & typeof UmbLitElement;
|
|
4
|
+
export declare class UmbInputDocumentGranularPermissionElement extends UmbInputDocumentGranularPermissionElement_base {
|
|
5
|
+
#private;
|
|
6
|
+
private _selectedIds;
|
|
7
|
+
get selectedIds(): Array<string>;
|
|
8
|
+
set selectedIds(ids: Array<string>);
|
|
9
|
+
set value(idsString: string);
|
|
10
|
+
private _items?;
|
|
11
|
+
constructor();
|
|
12
|
+
protected firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
|
|
13
|
+
protected getFormElement(): undefined;
|
|
14
|
+
disconnectedCallback(): void;
|
|
15
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
16
|
+
static styles: import("@lit/reactive-element/css-tag").CSSResult[];
|
|
17
|
+
}
|
|
18
|
+
export default UmbInputDocumentGranularPermissionElement;
|
|
19
|
+
declare global {
|
|
20
|
+
interface HTMLElementTagNameMap {
|
|
21
|
+
'umb-input-document-granular-permission': UmbInputDocumentGranularPermissionElement;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { css, html, customElement, property, state } from '../../../../../external/lit/index.js';
|
|
8
|
+
import { FormControlMixin } from '../../../../../external/uui/index.js';
|
|
9
|
+
import { UMB_MODAL_MANAGER_CONTEXT_TOKEN, UMB_CONFIRM_MODAL, UMB_DOCUMENT_PICKER_MODAL, } from '../../../../core/modal/index.js';
|
|
10
|
+
import { UmbLitElement } from '../../../../../shared/lit-element/index.js';
|
|
11
|
+
import { UmbDocumentRepository } from '../../index.js';
|
|
12
|
+
import { UmbChangeEvent } from '../../../../../shared/umb-events/index.js';
|
|
13
|
+
export let UmbInputDocumentGranularPermissionElement = class UmbInputDocumentGranularPermissionElement extends FormControlMixin(UmbLitElement) {
|
|
14
|
+
get selectedIds() {
|
|
15
|
+
return this._selectedIds;
|
|
16
|
+
}
|
|
17
|
+
set selectedIds(ids) {
|
|
18
|
+
this._selectedIds = ids;
|
|
19
|
+
super.value = ids.join(',');
|
|
20
|
+
this.#observePickedDocuments();
|
|
21
|
+
}
|
|
22
|
+
set value(idsString) {
|
|
23
|
+
if (idsString !== this._value) {
|
|
24
|
+
this.selectedIds = idsString.split(/[ ,]+/);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
#documentRepository;
|
|
28
|
+
#modalContext;
|
|
29
|
+
#pickedItemsObserver;
|
|
30
|
+
constructor() {
|
|
31
|
+
super();
|
|
32
|
+
this._selectedIds = [];
|
|
33
|
+
this.#documentRepository = new UmbDocumentRepository(this);
|
|
34
|
+
this.consumeContext(UMB_MODAL_MANAGER_CONTEXT_TOKEN, (instance) => (this.#modalContext = instance));
|
|
35
|
+
}
|
|
36
|
+
firstUpdated(_changedProperties) {
|
|
37
|
+
super.firstUpdated(_changedProperties);
|
|
38
|
+
this.#observePickedDocuments();
|
|
39
|
+
}
|
|
40
|
+
getFormElement() {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
async #observePickedDocuments() {
|
|
44
|
+
this.#pickedItemsObserver?.destroy();
|
|
45
|
+
const { asObservable } = await this.#documentRepository.requestItems(this._selectedIds);
|
|
46
|
+
this.#pickedItemsObserver = this.observe(asObservable(), (items) => (this._items = items));
|
|
47
|
+
}
|
|
48
|
+
#openDocumentPicker() {
|
|
49
|
+
// We send a shallow copy(good enough as its just an array of ids) of our this._selectedIds, as we don't want the modal to manipulate our data:
|
|
50
|
+
const modalContext = this.#modalContext?.open(UMB_DOCUMENT_PICKER_MODAL, {
|
|
51
|
+
selection: [...this._selectedIds],
|
|
52
|
+
});
|
|
53
|
+
modalContext?.onSubmit().then(({ selection }) => {
|
|
54
|
+
//this.#setSelection(selection);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
async #removeItem(item) {
|
|
58
|
+
const modalContext = this.#modalContext?.open(UMB_CONFIRM_MODAL, {
|
|
59
|
+
color: 'danger',
|
|
60
|
+
headline: `Remove ${item.name}?`,
|
|
61
|
+
content: 'Are you sure you want to remove this item',
|
|
62
|
+
confirmLabel: 'Remove',
|
|
63
|
+
});
|
|
64
|
+
await modalContext?.onSubmit();
|
|
65
|
+
const newSelection = this._selectedIds.filter((value) => value !== item.id);
|
|
66
|
+
this.#setSelection(newSelection);
|
|
67
|
+
}
|
|
68
|
+
#setSelection(newSelection) {
|
|
69
|
+
this.selectedIds = newSelection;
|
|
70
|
+
this.dispatchEvent(new UmbChangeEvent());
|
|
71
|
+
}
|
|
72
|
+
disconnectedCallback() {
|
|
73
|
+
super.disconnectedCallback();
|
|
74
|
+
this.#pickedItemsObserver?.destroy();
|
|
75
|
+
}
|
|
76
|
+
render() {
|
|
77
|
+
return html `
|
|
78
|
+
${this._items?.map((item) => this.#renderItem(item))}
|
|
79
|
+
<uui-button id="add-button" look="placeholder" @click=${this.#openDocumentPicker} label="open">Add</uui-button>
|
|
80
|
+
`;
|
|
81
|
+
}
|
|
82
|
+
#renderItem(item) {
|
|
83
|
+
return html ` <div>Render something here</div> `;
|
|
84
|
+
}
|
|
85
|
+
static { this.styles = [
|
|
86
|
+
css `
|
|
87
|
+
#add-button {
|
|
88
|
+
width: 100%;
|
|
89
|
+
}
|
|
90
|
+
`,
|
|
91
|
+
]; }
|
|
92
|
+
};
|
|
93
|
+
__decorate([
|
|
94
|
+
property()
|
|
95
|
+
], UmbInputDocumentGranularPermissionElement.prototype, "value", null);
|
|
96
|
+
__decorate([
|
|
97
|
+
state()
|
|
98
|
+
], UmbInputDocumentGranularPermissionElement.prototype, "_items", void 0);
|
|
99
|
+
UmbInputDocumentGranularPermissionElement = __decorate([
|
|
100
|
+
customElement('umb-input-document-granular-permission')
|
|
101
|
+
], UmbInputDocumentGranularPermissionElement);
|
|
102
|
+
export default UmbInputDocumentGranularPermissionElement;
|
|
@@ -14,6 +14,15 @@ const entityActions = [
|
|
|
14
14
|
api: UmbCreateDocumentEntityAction,
|
|
15
15
|
entityTypes: [DOCUMENT_ROOT_ENTITY_TYPE, DOCUMENT_ENTITY_TYPE],
|
|
16
16
|
},
|
|
17
|
+
conditions: [
|
|
18
|
+
{
|
|
19
|
+
alias: 'Umb.Condition.UserPermission',
|
|
20
|
+
// TODO: investigate why the match property is not typed
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
22
|
+
//@ts-ignore
|
|
23
|
+
match: 'Umb.UserPermission.Document.Create',
|
|
24
|
+
},
|
|
25
|
+
],
|
|
17
26
|
},
|
|
18
27
|
];
|
|
19
28
|
const modals = [
|
|
@@ -18,7 +18,7 @@ const entityActions = [
|
|
|
18
18
|
weight: 800,
|
|
19
19
|
meta: {
|
|
20
20
|
icon: 'umb:blueprint',
|
|
21
|
-
label: 'Create
|
|
21
|
+
label: 'Create Document Blueprint (TBD)',
|
|
22
22
|
repositoryAlias: DOCUMENT_REPOSITORY_ALIAS,
|
|
23
23
|
api: UmbCreateDocumentBlueprintEntityAction,
|
|
24
24
|
entityTypes: [DOCUMENT_ENTITY_TYPE],
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { UmbDocumentRepository } from '../repository/document.repository.js';
|
|
1
|
+
import { type UmbDocumentRepository } from '../repository/document.repository.js';
|
|
2
2
|
import { UmbEntityActionBase } from '../../../core/entity-action/index.js';
|
|
3
3
|
import { UmbControllerHostElement } from '../../../../libs/controller-api/index.js';
|
|
4
4
|
export declare class UmbDocumentPermissionsEntityAction extends UmbEntityActionBase<UmbDocumentRepository> {
|
|
5
|
+
#private;
|
|
5
6
|
constructor(host: UmbControllerHostElement, repositoryAlias: string, unique: string);
|
|
6
7
|
execute(): Promise<void>;
|
|
7
8
|
}
|
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
import { UmbEntityActionBase } from '../../../core/entity-action/index.js';
|
|
2
|
+
import { UmbContextConsumerController } from '../../../../libs/context-api/index.js';
|
|
3
|
+
import { UMB_MODAL_MANAGER_CONTEXT_TOKEN, } from '../../../core/modal/index.js';
|
|
2
4
|
export class UmbDocumentPermissionsEntityAction extends UmbEntityActionBase {
|
|
5
|
+
#modalContext;
|
|
3
6
|
constructor(host, repositoryAlias, unique) {
|
|
4
7
|
super(host, repositoryAlias, unique);
|
|
8
|
+
new UmbContextConsumerController(this.host, UMB_MODAL_MANAGER_CONTEXT_TOKEN, (instance) => {
|
|
9
|
+
this.#modalContext = instance;
|
|
10
|
+
});
|
|
5
11
|
}
|
|
6
12
|
async execute() {
|
|
7
|
-
|
|
8
|
-
|
|
13
|
+
alert('WIP Permissions dialog');
|
|
14
|
+
if (!this.repository)
|
|
15
|
+
return;
|
|
16
|
+
if (!this.#modalContext)
|
|
17
|
+
return;
|
|
18
|
+
// TODO: we don't get "type" as part of the item
|
|
19
|
+
//const { data, error } = await this.repository.requestItems([this.unique]);
|
|
20
|
+
/*
|
|
21
|
+
const modalContext = this.#modalContext.open(UMB_ENTITY_USER_PERMISSION_MODAL, {
|
|
22
|
+
unique: this.unique,
|
|
23
|
+
entityType: ['document'],
|
|
24
|
+
});
|
|
25
|
+
*/
|
|
26
|
+
// const { selection } = await modalContext.onSubmit();
|
|
27
|
+
// console.log(selection);
|
|
28
|
+
// await this.repository?.setPermissions();
|
|
9
29
|
}
|
|
10
30
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export * from './repository/index.js';
|
|
2
2
|
export * from './workspace/index.js';
|
|
3
3
|
export * from './recycle-bin/index.js';
|
|
4
|
+
export * from './user-permissions/index.js';
|
|
5
|
+
export * from './components/index.js';
|
|
4
6
|
import './components/index.js';
|
|
5
7
|
export declare const DOCUMENT_ROOT_ENTITY_TYPE = "document-root";
|
|
6
8
|
export declare const DOCUMENT_ENTITY_TYPE = "document";
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export * from './repository/index.js';
|
|
2
2
|
export * from './workspace/index.js';
|
|
3
3
|
export * from './recycle-bin/index.js';
|
|
4
|
+
export * from './user-permissions/index.js';
|
|
5
|
+
export * from './components/index.js';
|
|
4
6
|
import './components/index.js';
|
|
5
7
|
export const DOCUMENT_ROOT_ENTITY_TYPE = 'document-root';
|
|
6
8
|
export const DOCUMENT_ENTITY_TYPE = 'document';
|
|
@@ -6,6 +6,7 @@ import { manifests as workspaceManifests } from './workspace/manifests.js';
|
|
|
6
6
|
import { manifests as entityActionManifests } from './entity-actions/manifests.js';
|
|
7
7
|
import { manifests as entityBulkActionManifests } from './entity-bulk-actions/manifests.js';
|
|
8
8
|
import { manifests as propertyEditorManifests } from './property-editors/manifests.js';
|
|
9
|
+
import { manifests as userPermissionManifests } from './user-permissions/manifests.js';
|
|
9
10
|
import { manifests as recycleBinManifests } from './recycle-bin/manifests.js';
|
|
10
11
|
export const manifests = [
|
|
11
12
|
...collectionManifests,
|
|
@@ -16,5 +17,6 @@ export const manifests = [
|
|
|
16
17
|
...entityActionManifests,
|
|
17
18
|
...entityBulkActionManifests,
|
|
18
19
|
...propertyEditorManifests,
|
|
20
|
+
...userPermissionManifests,
|
|
19
21
|
...recycleBinManifests,
|
|
20
22
|
];
|
|
@@ -25,16 +25,16 @@ export class UmbDocumentRepository {
|
|
|
25
25
|
this.#init = Promise.all([
|
|
26
26
|
new UmbContextConsumerController(this.#host, UMB_DOCUMENT_TREE_STORE_CONTEXT_TOKEN, (instance) => {
|
|
27
27
|
this.#treeStore = instance;
|
|
28
|
-
}),
|
|
28
|
+
}).asPromise(),
|
|
29
29
|
new UmbContextConsumerController(this.#host, UMB_DOCUMENT_STORE_CONTEXT_TOKEN, (instance) => {
|
|
30
30
|
this.#store = instance;
|
|
31
|
-
}),
|
|
31
|
+
}).asPromise(),
|
|
32
32
|
new UmbContextConsumerController(this.#host, UMB_DOCUMENT_ITEM_STORE_CONTEXT_TOKEN, (instance) => {
|
|
33
33
|
this.#itemStore = instance;
|
|
34
|
-
}),
|
|
34
|
+
}).asPromise(),
|
|
35
35
|
new UmbContextConsumerController(this.#host, UMB_NOTIFICATION_CONTEXT_TOKEN, (instance) => {
|
|
36
36
|
this.#notificationContext = instance;
|
|
37
|
-
}),
|
|
37
|
+
}).asPromise(),
|
|
38
38
|
]);
|
|
39
39
|
}
|
|
40
40
|
// TODO: Move
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { ManifestRepository, ManifestStore, ManifestTreeStore } from '../../../core/extension-registry/index.js';
|
|
1
|
+
import type { ManifestItemStore, ManifestRepository, ManifestStore, ManifestTreeStore } from '../../../core/extension-registry/index.js';
|
|
2
2
|
export declare const DOCUMENT_REPOSITORY_ALIAS = "Umb.Repository.Document";
|
|
3
3
|
export declare const DOCUMENT_STORE_ALIAS = "Umb.Store.Document";
|
|
4
4
|
export declare const DOCUMENT_TREE_STORE_ALIAS = "Umb.Store.DocumentTree";
|
|
5
|
-
export declare const
|
|
5
|
+
export declare const DOCUMENT_ITEM_STORE_ALIAS = "Umb.Store.DocumentItem";
|
|
6
|
+
export declare const manifests: (ManifestItemStore | ManifestRepository | ManifestStore | ManifestTreeStore)[];
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { UmbDocumentRepository } from '../repository/document.repository.js';
|
|
2
|
+
import { UmbDocumentItemStore } from './document-item.store.js';
|
|
2
3
|
import { UmbDocumentStore } from './document.store.js';
|
|
3
4
|
import { UmbDocumentTreeStore } from './document.tree.store.js';
|
|
4
5
|
export const DOCUMENT_REPOSITORY_ALIAS = 'Umb.Repository.Document';
|
|
@@ -10,6 +11,7 @@ const repository = {
|
|
|
10
11
|
};
|
|
11
12
|
export const DOCUMENT_STORE_ALIAS = 'Umb.Store.Document';
|
|
12
13
|
export const DOCUMENT_TREE_STORE_ALIAS = 'Umb.Store.DocumentTree';
|
|
14
|
+
export const DOCUMENT_ITEM_STORE_ALIAS = 'Umb.Store.DocumentItem';
|
|
13
15
|
const store = {
|
|
14
16
|
type: 'store',
|
|
15
17
|
alias: DOCUMENT_STORE_ALIAS,
|
|
@@ -22,4 +24,10 @@ const treeStore = {
|
|
|
22
24
|
name: 'Document Tree Store',
|
|
23
25
|
class: UmbDocumentTreeStore,
|
|
24
26
|
};
|
|
25
|
-
|
|
27
|
+
const itemStore = {
|
|
28
|
+
type: 'itemStore',
|
|
29
|
+
alias: DOCUMENT_ITEM_STORE_ALIAS,
|
|
30
|
+
name: 'Document Item Store',
|
|
31
|
+
class: UmbDocumentItemStore,
|
|
32
|
+
};
|
|
33
|
+
export const manifests = [repository, store, treeStore, itemStore];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './manifests.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './manifests.js';
|