diff --git a/npm/ng-packs/dist/feature-management/README.md b/npm/ng-packs/dist/feature-management/README.md
new file mode 100644
index 0000000000..d040ec455a
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/README.md
@@ -0,0 +1 @@
+
@abp/ng.feature-management
diff --git a/npm/ng-packs/dist/feature-management/abp-ng.feature-management.d.ts b/npm/ng-packs/dist/feature-management/abp-ng.feature-management.d.ts
new file mode 100644
index 0000000000..79bee14655
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/abp-ng.feature-management.d.ts
@@ -0,0 +1,10 @@
+/**
+ * Generated bundle index. Do not edit.
+ */
+export * from './public-api';
+export { GetFeatures as ɵe, UpdateFeatures as ɵf } from './lib/actions/feature-management.actions';
+export { FeatureManagementComponent as ɵa } from './lib/components/feature-management/feature-management.component';
+export { FeatureManagement as ɵg } from './lib/models';
+export { FeatureManagementService as ɵd } from './lib/services/feature-management.service';
+export { FeatureManagementState as ɵb } from './lib/states';
+export { FeatureManagementState as ɵc } from './lib/states/feature-management.state';
diff --git a/npm/ng-packs/dist/feature-management/abp-ng.feature-management.metadata.json b/npm/ng-packs/dist/feature-management/abp-ng.feature-management.metadata.json
new file mode 100644
index 0000000000..7510f82cae
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/abp-ng.feature-management.metadata.json
@@ -0,0 +1 @@
+{"__symbolic":"module","version":4,"exports":[{"from":"./lib/feature-management/feature-management.component"}],"metadata":{"FeatureManagementModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":7,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"ɵa"}],"imports":[{"__symbolic":"reference","module":"@abp/ng.core","name":"CoreModule","line":9,"character":12},{"__symbolic":"reference","module":"@abp/ng.theme.shared","name":"ThemeSharedModule","line":9,"character":24},{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@ngxs/store","name":"NgxsModule","line":9,"character":43},"member":"forFeature"},"arguments":[[{"__symbolic":"reference","name":"ɵc"}]]}],"exports":[{"__symbolic":"reference","name":"ɵa"}]}]}],"members":{}},"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":9,"character":1},"arguments":[{"selector":"abp-feature-management","template":"\n \n {{ 'AbpTenantManagement::Permission:ManageFeatures' | abpLocalization }}
\n \n\n \n \n \n\n \n \n \n {{ 'AbpFeatureManagement::Save' | abpLocalization }}\n \n \n\n"}]}],"members":{"providerKey":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":14,"character":3}}]}],"providerName":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":17,"character":3}}]}],"visible":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":22,"character":3}}]}],"visibleChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":34,"character":3}}]}],"features$":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@ngxs/store","name":"Select","line":37,"character":3},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ɵb"},"member":"getFeatures"}]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@ngxs/store","name":"Store","line":44,"character":29}]}],"openModal":[{"__symbolic":"method"}],"getFeatures":[{"__symbolic":"method"}],"buildForm":[{"__symbolic":"method"}],"save":[{"__symbolic":"method"}]}},"ɵc":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@ngxs/store","name":"State","line":6,"character":1},"arguments":[{"name":"FeatureManagementState","defaults":{"features":{}}}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵd"}]}],"getFeatures":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@ngxs/store","name":"Action","line":18,"character":3},"arguments":[{"__symbolic":"reference","name":"ɵe"}]}]}],"updateFeatures":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@ngxs/store","name":"Action","line":29,"character":3},"arguments":[{"__symbolic":"reference","name":"ɵf"}]}]}]},"statics":{"getFeatures":{"__symbolic":"function","parameters":["features"],"value":{"__symbolic":"reference","name":"features"}}}},"ɵd":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@abp/ng.core","name":"RestService","line":10,"character":28},{"__symbolic":"reference","module":"@ngxs/store","name":"Store","line":10,"character":56}]}],"getFeatures":[{"__symbolic":"method"}],"updateFeatures":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"ɵe":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ɵg"},"member":"Provider"}]}]},"statics":{"type":"[FeatureManagement] Get Features"}},"ɵf":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Expression form not supported","line":9,"character":30,"module":"./lib/actions/feature-management.actions"}]}]},"statics":{"type":"[FeatureManagement] Update Features"}}},"origins":{"FeatureManagementModule":"./lib/feature-management.module","ɵa":"./lib/components/feature-management/feature-management.component","ɵb":"./lib/states","ɵc":"./lib/states/feature-management.state","ɵd":"./lib/services/feature-management.service","ɵe":"./lib/actions/feature-management.actions","ɵf":"./lib/actions/feature-management.actions","ɵg":"./lib/models"},"importAs":"@abp/ng.feature-management"}
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/bundles/abp-ng.feature-management.umd.js b/npm/ng-packs/dist/feature-management/bundles/abp-ng.feature-management.umd.js
new file mode 100644
index 0000000000..517a026099
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/bundles/abp-ng.feature-management.umd.js
@@ -0,0 +1,596 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@abp/ng.core'), require('@abp/ng.theme.shared'), require('@angular/core'), require('@ngxs/store'), require('rxjs'), require('rxjs/operators'), require('@angular/forms')) :
+ typeof define === 'function' && define.amd ? define('@abp/ng.feature-management', ['exports', '@abp/ng.core', '@abp/ng.theme.shared', '@angular/core', '@ngxs/store', 'rxjs', 'rxjs/operators', '@angular/forms'], factory) :
+ (global = global || self, factory((global.abp = global.abp || {}, global.abp.ng = global.abp.ng || {}, global.abp.ng['feature-management'] = {}), global.ng_core, global.ng_theme_shared, global.ng.core, global.store, global.rxjs, global.rxjs.operators, global.ng.forms));
+}(this, function (exports, ng_core, ng_theme_shared, core, store, rxjs, operators, forms) { 'use strict';
+
+ /*! *****************************************************************************
+ Copyright (c) Microsoft Corporation. All rights reserved.
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
+ this file except in compliance with the License. You may obtain a copy of the
+ License at http://www.apache.org/licenses/LICENSE-2.0
+
+ THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
+ WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
+ MERCHANTABLITY OR NON-INFRINGEMENT.
+
+ See the Apache Version 2.0 License for specific language governing permissions
+ and limitations under the License.
+ ***************************************************************************** */
+ /* global Reflect, Promise */
+
+ var extendStatics = function(d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ };
+
+ function __extends(d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ }
+
+ var __assign = function() {
+ __assign = Object.assign || function __assign(t) {
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
+ s = arguments[i];
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+ }
+ return t;
+ };
+ return __assign.apply(this, arguments);
+ };
+
+ function __rest(s, e) {
+ var t = {};
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+ t[p] = s[p];
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+ t[p[i]] = s[p[i]];
+ }
+ return t;
+ }
+
+ function __decorate(decorators, target, key, desc) {
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
+ 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;
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
+ }
+
+ function __param(paramIndex, decorator) {
+ return function (target, key) { decorator(target, key, paramIndex); }
+ }
+
+ function __metadata(metadataKey, metadataValue) {
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
+ }
+
+ function __awaiter(thisArg, _arguments, P, generator) {
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+ }
+
+ function __generator(thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (_) try {
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+ }
+
+ function __exportStar(m, exports) {
+ for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
+ }
+
+ function __values(o) {
+ var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
+ if (m) return m.call(o);
+ return {
+ next: function () {
+ if (o && i >= o.length) o = void 0;
+ return { value: o && o[i++], done: !o };
+ }
+ };
+ }
+
+ function __read(o, n) {
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
+ if (!m) return o;
+ var i = m.call(o), r, ar = [], e;
+ try {
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+ }
+ catch (error) { e = { error: error }; }
+ finally {
+ try {
+ if (r && !r.done && (m = i["return"])) m.call(i);
+ }
+ finally { if (e) throw e.error; }
+ }
+ return ar;
+ }
+
+ function __spread() {
+ for (var ar = [], i = 0; i < arguments.length; i++)
+ ar = ar.concat(__read(arguments[i]));
+ return ar;
+ }
+
+ function __spreadArrays() {
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+ r[k] = a[j];
+ return r;
+ };
+
+ function __await(v) {
+ return this instanceof __await ? (this.v = v, this) : new __await(v);
+ }
+
+ function __asyncGenerator(thisArg, _arguments, generator) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
+ return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
+ function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
+ function fulfill(value) { resume("next", value); }
+ function reject(value) { resume("throw", value); }
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
+ }
+
+ function __asyncDelegator(o) {
+ var i, p;
+ return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
+ function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
+ }
+
+ function __asyncValues(o) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var m = o[Symbol.asyncIterator], i;
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
+ }
+
+ function __makeTemplateObject(cooked, raw) {
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
+ return cooked;
+ };
+
+ function __importStar(mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result.default = mod;
+ return result;
+ }
+
+ function __importDefault(mod) {
+ return (mod && mod.__esModule) ? mod : { default: mod };
+ }
+
+ /**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+ var GetFeatures = /** @class */ (function () {
+ function GetFeatures(payload) {
+ this.payload = payload;
+ }
+ GetFeatures.type = '[FeatureManagement] Get Features';
+ return GetFeatures;
+ }());
+ if (false) {
+ /** @type {?} */
+ GetFeatures.type;
+ /** @type {?} */
+ GetFeatures.prototype.payload;
+ }
+ var UpdateFeatures = /** @class */ (function () {
+ function UpdateFeatures(payload) {
+ this.payload = payload;
+ }
+ UpdateFeatures.type = '[FeatureManagement] Update Features';
+ return UpdateFeatures;
+ }());
+ if (false) {
+ /** @type {?} */
+ UpdateFeatures.type;
+ /** @type {?} */
+ UpdateFeatures.prototype.payload;
+ }
+
+ /**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+
+ /**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+ var FeatureManagementService = /** @class */ (function () {
+ function FeatureManagementService(rest, store) {
+ this.rest = rest;
+ this.store = store;
+ }
+ /**
+ * @param {?} params
+ * @return {?}
+ */
+ FeatureManagementService.prototype.getFeatures = /**
+ * @param {?} params
+ * @return {?}
+ */
+ function (params) {
+ /** @type {?} */
+ var request = {
+ method: 'GET',
+ url: '/api/abp/features',
+ params: params,
+ };
+ return this.rest.request(request);
+ };
+ /**
+ * @param {?} __0
+ * @return {?}
+ */
+ FeatureManagementService.prototype.updateFeatures = /**
+ * @param {?} __0
+ * @return {?}
+ */
+ function (_a) {
+ var features = _a.features, providerKey = _a.providerKey, providerName = _a.providerName;
+ /** @type {?} */
+ var request = {
+ method: 'PUT',
+ url: '/api/abp/features',
+ body: { features: features },
+ params: { providerKey: providerKey, providerName: providerName },
+ };
+ return this.rest.request(request);
+ };
+ FeatureManagementService.decorators = [
+ { type: core.Injectable, args: [{
+ providedIn: 'root',
+ },] }
+ ];
+ /** @nocollapse */
+ FeatureManagementService.ctorParameters = function () { return [
+ { type: ng_core.RestService },
+ { type: store.Store }
+ ]; };
+ /** @nocollapse */ FeatureManagementService.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function FeatureManagementService_Factory() { return new FeatureManagementService(core.ɵɵinject(ng_core.RestService), core.ɵɵinject(store.Store)); }, token: FeatureManagementService, providedIn: "root" });
+ return FeatureManagementService;
+ }());
+ if (false) {
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementService.prototype.rest;
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementService.prototype.store;
+ }
+
+ /**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+ var FeatureManagementState = /** @class */ (function () {
+ function FeatureManagementState(featureManagementService) {
+ this.featureManagementService = featureManagementService;
+ }
+ /**
+ * @param {?} __0
+ * @return {?}
+ */
+ FeatureManagementState.getFeatures = /**
+ * @param {?} __0
+ * @return {?}
+ */
+ function (_a) {
+ var features = _a.features;
+ return features;
+ };
+ /**
+ * @param {?} __0
+ * @param {?} __1
+ * @return {?}
+ */
+ FeatureManagementState.prototype.getFeatures = /**
+ * @param {?} __0
+ * @param {?} __1
+ * @return {?}
+ */
+ function (_a, _b) {
+ var patchState = _a.patchState;
+ var payload = _b.payload;
+ return this.featureManagementService.getFeatures(payload).pipe(operators.tap((/**
+ * @param {?} __0
+ * @return {?}
+ */
+ function (_a) {
+ var features = _a.features;
+ return patchState({
+ features: features,
+ });
+ })));
+ };
+ /**
+ * @param {?} _
+ * @param {?} __1
+ * @return {?}
+ */
+ FeatureManagementState.prototype.updateFeatures = /**
+ * @param {?} _
+ * @param {?} __1
+ * @return {?}
+ */
+ function (_, _a) {
+ var payload = _a.payload;
+ return this.featureManagementService.updateFeatures(payload);
+ };
+ __decorate([
+ store.Action(GetFeatures),
+ __metadata("design:type", Function),
+ __metadata("design:paramtypes", [Object, GetFeatures]),
+ __metadata("design:returntype", void 0)
+ ], FeatureManagementState.prototype, "getFeatures", null);
+ __decorate([
+ store.Action(UpdateFeatures),
+ __metadata("design:type", Function),
+ __metadata("design:paramtypes", [Object, UpdateFeatures]),
+ __metadata("design:returntype", void 0)
+ ], FeatureManagementState.prototype, "updateFeatures", null);
+ __decorate([
+ store.Selector(),
+ __metadata("design:type", Function),
+ __metadata("design:paramtypes", [Object]),
+ __metadata("design:returntype", void 0)
+ ], FeatureManagementState, "getFeatures", null);
+ FeatureManagementState = __decorate([
+ store.State({
+ name: 'FeatureManagementState',
+ defaults: (/** @type {?} */ ({ features: {} })),
+ }),
+ __metadata("design:paramtypes", [FeatureManagementService])
+ ], FeatureManagementState);
+ return FeatureManagementState;
+ }());
+ if (false) {
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementState.prototype.featureManagementService;
+ }
+
+ /**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+
+ /**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+ var FeatureManagementComponent = /** @class */ (function () {
+ function FeatureManagementComponent(store) {
+ this.store = store;
+ this.visibleChange = new core.EventEmitter();
+ this.modalBusy = false;
+ }
+ Object.defineProperty(FeatureManagementComponent.prototype, "visible", {
+ get: /**
+ * @return {?}
+ */
+ function () {
+ return this._visible;
+ },
+ set: /**
+ * @param {?} value
+ * @return {?}
+ */
+ function (value) {
+ this._visible = value;
+ this.visibleChange.emit(value);
+ if (value)
+ this.openModal();
+ },
+ enumerable: true,
+ configurable: true
+ });
+ /**
+ * @return {?}
+ */
+ FeatureManagementComponent.prototype.openModal = /**
+ * @return {?}
+ */
+ function () {
+ if (!this.providerKey || !this.providerName) {
+ throw new Error('Provider Key and Provider Name are required.');
+ }
+ this.getFeatures();
+ };
+ /**
+ * @return {?}
+ */
+ FeatureManagementComponent.prototype.getFeatures = /**
+ * @return {?}
+ */
+ function () {
+ var _this = this;
+ this.store
+ .dispatch(new GetFeatures({ providerKey: this.providerKey, providerName: this.providerName }))
+ .pipe(operators.pluck('FeatureManagementState', 'features'))
+ .subscribe((/**
+ * @param {?} features
+ * @return {?}
+ */
+ function (features) {
+ _this.buildForm(features);
+ }));
+ };
+ /**
+ * @param {?} features
+ * @return {?}
+ */
+ FeatureManagementComponent.prototype.buildForm = /**
+ * @param {?} features
+ * @return {?}
+ */
+ function (features) {
+ /** @type {?} */
+ var formGroupObj = {};
+ for (var i = 0; i < features.length; i++) {
+ formGroupObj[i] = new forms.FormControl(features[i].value === 'false' ? null : features[i].value);
+ }
+ this.form = new forms.FormGroup(formGroupObj);
+ };
+ /**
+ * @return {?}
+ */
+ FeatureManagementComponent.prototype.save = /**
+ * @return {?}
+ */
+ function () {
+ var _this = this;
+ this.modalBusy = true;
+ /** @type {?} */
+ var features = this.store.selectSnapshot(FeatureManagementState.getFeatures);
+ features = features.map((/**
+ * @param {?} feature
+ * @param {?} i
+ * @return {?}
+ */
+ function (feature, i) { return ({
+ name: feature.name,
+ value: !_this.form.value[i] || _this.form.value[i] === 'false' ? null : _this.form.value[i],
+ }); }));
+ this.store
+ .dispatch(new UpdateFeatures({
+ providerKey: this.providerKey,
+ providerName: this.providerName,
+ features: features,
+ }))
+ .subscribe((/**
+ * @return {?}
+ */
+ function () {
+ _this.modalBusy = false;
+ _this.visible = false;
+ }));
+ };
+ FeatureManagementComponent.decorators = [
+ { type: core.Component, args: [{
+ selector: 'abp-feature-management',
+ template: "\n \n {{ 'AbpTenantManagement::Permission:ManageFeatures' | abpLocalization }}
\n \n\n \n \n \n\n \n \n \n {{ 'AbpFeatureManagement::Save' | abpLocalization }}\n \n \n\n"
+ }] }
+ ];
+ /** @nocollapse */
+ FeatureManagementComponent.ctorParameters = function () { return [
+ { type: store.Store }
+ ]; };
+ FeatureManagementComponent.propDecorators = {
+ providerKey: [{ type: core.Input }],
+ providerName: [{ type: core.Input }],
+ visible: [{ type: core.Input }],
+ visibleChange: [{ type: core.Output }]
+ };
+ __decorate([
+ store.Select(FeatureManagementState.getFeatures),
+ __metadata("design:type", rxjs.Observable)
+ ], FeatureManagementComponent.prototype, "features$", void 0);
+ return FeatureManagementComponent;
+ }());
+ if (false) {
+ /** @type {?} */
+ FeatureManagementComponent.prototype.providerKey;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.providerName;
+ /**
+ * @type {?}
+ * @protected
+ */
+ FeatureManagementComponent.prototype._visible;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.visibleChange;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.features$;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.modalBusy;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.form;
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementComponent.prototype.store;
+ }
+
+ /**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+ var FeatureManagementModule = /** @class */ (function () {
+ function FeatureManagementModule() {
+ }
+ FeatureManagementModule.decorators = [
+ { type: core.NgModule, args: [{
+ declarations: [FeatureManagementComponent],
+ imports: [ng_core.CoreModule, ng_theme_shared.ThemeSharedModule, store.NgxsModule.forFeature([FeatureManagementState])],
+ exports: [FeatureManagementComponent],
+ },] }
+ ];
+ return FeatureManagementModule;
+ }());
+
+ exports.FeatureManagementComponent = FeatureManagementComponent;
+ exports.FeatureManagementModule = FeatureManagementModule;
+ exports.ɵa = FeatureManagementComponent;
+ exports.ɵb = FeatureManagementState;
+ exports.ɵc = FeatureManagementState;
+ exports.ɵd = FeatureManagementService;
+ exports.ɵe = GetFeatures;
+ exports.ɵf = UpdateFeatures;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
+//# sourceMappingURL=abp-ng.feature-management.umd.js.map
diff --git a/npm/ng-packs/dist/feature-management/bundles/abp-ng.feature-management.umd.js.map b/npm/ng-packs/dist/feature-management/bundles/abp-ng.feature-management.umd.js.map
new file mode 100644
index 0000000000..2ab31069d5
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/bundles/abp-ng.feature-management.umd.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"abp-ng.feature-management.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","ng://@abp/ng.feature-management/lib/actions/feature-management.actions.ts","ng://@abp/ng.feature-management/lib/services/feature-management.service.ts","ng://@abp/ng.feature-management/lib/states/feature-management.state.ts","ng://@abp/ng.feature-management/lib/components/feature-management/feature-management.component.ts","ng://@abp/ng.feature-management/lib/feature-management.module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n 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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { FeatureManagement } from '../models';\n\nexport class GetFeatures {\n static readonly type = '[FeatureManagement] Get Features';\n constructor(public payload: FeatureManagement.Provider) {}\n}\n\nexport class UpdateFeatures {\n static readonly type = '[FeatureManagement] Update Features';\n constructor(public payload: FeatureManagement.Provider & FeatureManagement.Features) {}\n}\n","import { Injectable } from '@angular/core';\nimport { RestService, Rest } from '@abp/ng.core';\nimport { Store } from '@ngxs/store';\nimport { Observable } from 'rxjs';\nimport { FeatureManagement } from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FeatureManagementService {\n constructor(private rest: RestService, private store: Store) {}\n\n getFeatures(params: FeatureManagement.Provider): Observable {\n const request: Rest.Request = {\n method: 'GET',\n url: '/api/abp/features',\n params,\n };\n return this.rest.request(request);\n }\n\n updateFeatures({\n features,\n providerKey,\n providerName,\n }: FeatureManagement.Provider & FeatureManagement.Features): Observable {\n const request: Rest.Request = {\n method: 'PUT',\n url: '/api/abp/features',\n body: { features },\n params: { providerKey, providerName },\n };\n return this.rest.request(request);\n }\n}\n","import { Action, Selector, State, StateContext } from '@ngxs/store';\nimport { tap } from 'rxjs/operators';\nimport { GetFeatures, UpdateFeatures } from '../actions/feature-management.actions';\nimport { FeatureManagement } from '../models/feature-management';\nimport { FeatureManagementService } from '../services/feature-management.service';\n\n@State({\n name: 'FeatureManagementState',\n defaults: { features: {} } as FeatureManagement.State,\n})\nexport class FeatureManagementState {\n @Selector()\n static getFeatures({ features }: FeatureManagement.State) {\n return features;\n }\n\n constructor(private featureManagementService: FeatureManagementService) {}\n\n @Action(GetFeatures)\n getFeatures({ patchState }: StateContext, { payload }: GetFeatures) {\n return this.featureManagementService.getFeatures(payload).pipe(\n tap(({ features }) =>\n patchState({\n features,\n }),\n ),\n );\n }\n\n @Action(UpdateFeatures)\n updateFeatures(_, { payload }: UpdateFeatures) {\n return this.featureManagementService.updateFeatures(payload);\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { Observable } from 'rxjs';\nimport { GetFeatures, UpdateFeatures } from '../../actions';\nimport { FeatureManagement } from '../../models/feature-management';\nimport { FeatureManagementState } from '../../states';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { pluck, tap } from 'rxjs/operators';\n\n@Component({\n selector: 'abp-feature-management',\n templateUrl: './feature-management.component.html',\n})\nexport class FeatureManagementComponent {\n @Input()\n providerKey: string;\n\n @Input()\n providerName: string;\n\n protected _visible;\n\n @Input()\n get visible(): boolean {\n return this._visible;\n }\n\n set visible(value: boolean) {\n this._visible = value;\n this.visibleChange.emit(value);\n\n if (value) this.openModal();\n }\n\n @Output()\n visibleChange = new EventEmitter();\n\n @Select(FeatureManagementState.getFeatures)\n features$: Observable;\n\n modalBusy: boolean = false;\n\n form: FormGroup;\n\n constructor(private store: Store) {}\n\n openModal() {\n if (!this.providerKey || !this.providerName) {\n throw new Error('Provider Key and Provider Name are required.');\n }\n\n this.getFeatures();\n }\n\n getFeatures() {\n this.store\n .dispatch(new GetFeatures({ providerKey: this.providerKey, providerName: this.providerName }))\n .pipe(pluck('FeatureManagementState', 'features'))\n .subscribe(features => {\n this.buildForm(features);\n });\n }\n\n buildForm(features) {\n const formGroupObj = {};\n\n for (let i = 0; i < features.length; i++) {\n formGroupObj[i] = new FormControl(features[i].value === 'false' ? null : features[i].value);\n }\n\n this.form = new FormGroup(formGroupObj);\n }\n\n save() {\n this.modalBusy = true;\n\n let features = this.store.selectSnapshot(FeatureManagementState.getFeatures);\n\n features = features.map((feature, i) => ({\n name: feature.name,\n value: !this.form.value[i] || this.form.value[i] === 'false' ? null : this.form.value[i],\n }));\n\n this.store\n .dispatch(\n new UpdateFeatures({\n providerKey: this.providerKey,\n providerName: this.providerName,\n features,\n }),\n )\n .subscribe(() => {\n this.modalBusy = false;\n this.visible = false;\n });\n }\n}\n","import { CoreModule } from '@abp/ng.core';\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\nimport { NgModule } from '@angular/core';\nimport { FeatureManagementComponent } from './components/feature-management/feature-management.component';\nimport { NgxsModule } from '@ngxs/store';\nimport { FeatureManagementState } from './states/feature-management.state';\n\n@NgModule({\n declarations: [FeatureManagementComponent],\n imports: [CoreModule, ThemeSharedModule, NgxsModule.forFeature([FeatureManagementState])],\n exports: [FeatureManagementComponent],\n})\nexport class FeatureManagementModule {}\n"],"names":["Injectable","RestService","Store","tap","tslib_1.__decorate","Action","Selector","State","EventEmitter","pluck","FormControl","FormGroup","Component","Input","Output","Select","Observable","NgModule","CoreModule","ThemeSharedModule","NgxsModule"],"mappings":"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"}
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/bundles/abp-ng.feature-management.umd.min.js b/npm/ng-packs/dist/feature-management/bundles/abp-ng.feature-management.umd.min.js
new file mode 100644
index 0000000000..28befa0821
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/bundles/abp-ng.feature-management.umd.min.js
@@ -0,0 +1,2 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@abp/ng.core"),require("@abp/ng.theme.shared"),require("@angular/core"),require("@ngxs/store"),require("rxjs"),require("rxjs/operators"),require("@angular/forms")):"function"==typeof define&&define.amd?define("@abp/ng.feature-management",["exports","@abp/ng.core","@abp/ng.theme.shared","@angular/core","@ngxs/store","rxjs","rxjs/operators","@angular/forms"],t):t(((e=e||self).abp=e.abp||{},e.abp.ng=e.abp.ng||{},e.abp.ng["feature-management"]={}),e.ng_core,e.ng_theme_shared,e.ng.core,e.store,e.rxjs,e.rxjs.operators,e.ng.forms)}(this,function(e,t,r,n,a,o,i,u){"use strict";function s(e,t,r,n){var a,o=arguments.length,i=o<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,r):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,n);else for(var u=e.length-1;u>=0;u--)(a=e[u])&&(i=(o<3?a(i):o>3?a(t,r,i):a(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i}function p(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}var c=function(){function e(e){this.payload=e}return e.type="[FeatureManagement] Get Features",e}();var f=function(){function e(e){this.payload=e}return e.type="[FeatureManagement] Update Features",e}();var l=function(){function e(e,t){this.rest=e,this.store=t}return e.prototype.getFeatures=function(e){var t={method:"GET",url:"/api/abp/features",params:e};return this.rest.request(t)},e.prototype.updateFeatures=function(e){var t={method:"PUT",url:"/api/abp/features",body:{features:e.features},params:{providerKey:e.providerKey,providerName:e.providerName}};return this.rest.request(t)},e.decorators=[{type:n.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:t.RestService},{type:a.Store}]},e.ngInjectableDef=n.ɵɵdefineInjectable({factory:function(){return new e(n.ɵɵinject(t.RestService),n.ɵɵinject(a.Store))},token:e,providedIn:"root"}),e}();var d=function(){function e(e){this.featureManagementService=e}return e.getFeatures=function(e){return e.features},e.prototype.getFeatures=function(e,t){var r=e.patchState,n=t.payload;return this.featureManagementService.getFeatures(n).pipe(i.tap(function(e){var t=e.features;return r({features:t})}))},e.prototype.updateFeatures=function(e,t){var r=t.payload;return this.featureManagementService.updateFeatures(r)},s([a.Action(c),p("design:type",Function),p("design:paramtypes",[Object,c]),p("design:returntype",void 0)],e.prototype,"getFeatures",null),s([a.Action(f),p("design:type",Function),p("design:paramtypes",[Object,f]),p("design:returntype",void 0)],e.prototype,"updateFeatures",null),s([a.Selector(),p("design:type",Function),p("design:paramtypes",[Object]),p("design:returntype",void 0)],e,"getFeatures",null),e=s([a.State({name:"FeatureManagementState",defaults:{features:{}}}),p("design:paramtypes",[l])],e)}();var m=function(){function e(e){this.store=e,this.visibleChange=new n.EventEmitter,this.modalBusy=!1}return Object.defineProperty(e.prototype,"visible",{get:function(){return this._visible},set:function(e){this._visible=e,this.visibleChange.emit(e),e&&this.openModal()},enumerable:!0,configurable:!0}),e.prototype.openModal=function(){if(!this.providerKey||!this.providerName)throw new Error("Provider Key and Provider Name are required.");this.getFeatures()},e.prototype.getFeatures=function(){var e=this;this.store.dispatch(new c({providerKey:this.providerKey,providerName:this.providerName})).pipe(i.pluck("FeatureManagementState","features")).subscribe(function(t){e.buildForm(t)})},e.prototype.buildForm=function(e){for(var t={},r=0;r\n \n {{ \'AbpTenantManagement::Permission:ManageFeatures\' | abpLocalization }}
\n \n\n \n \n \n\n \n \n \n {{ \'AbpFeatureManagement::Save\' | abpLocalization }}\n \n \n\n'}]}],e.ctorParameters=function(){return[{type:a.Store}]},e.propDecorators={providerKey:[{type:n.Input}],providerName:[{type:n.Input}],visible:[{type:n.Input}],visibleChange:[{type:n.Output}]},s([a.Select(d.getFeatures),p("design:type",o.Observable)],e.prototype,"features$",void 0),e}();var g=function(){function e(){}return e.decorators=[{type:n.NgModule,args:[{declarations:[m],imports:[t.CoreModule,r.ThemeSharedModule,a.NgxsModule.forFeature([d])],exports:[m]}]}],e}();e.FeatureManagementComponent=m,e.FeatureManagementModule=g,e.ɵa=m,e.ɵb=d,e.ɵc=d,e.ɵd=l,e.ɵe=c,e.ɵf=f,Object.defineProperty(e,"__esModule",{value:!0})});
+//# sourceMappingURL=abp-ng.feature-management.umd.min.js.map
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/bundles/abp-ng.feature-management.umd.min.js.map b/npm/ng-packs/dist/feature-management/bundles/abp-ng.feature-management.umd.min.js.map
new file mode 100644
index 0000000000..aeaeeb062f
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/bundles/abp-ng.feature-management.umd.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://@abp/ng.feature-management/lib/actions/feature-management.actions.ts","ng://@abp/ng.feature-management/lib/services/feature-management.service.ts","ng://@abp/ng.feature-management/lib/states/feature-management.state.ts","ng://@abp/ng.feature-management/lib/components/feature-management/feature-management.component.ts","ng://@abp/ng.feature-management/lib/feature-management.module.ts"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__metadata","metadataKey","metadataValue","metadata","GetFeatures","payload","this","type","UpdateFeatures","FeatureManagementService","rest","store","prototype","getFeatures","params","request","method","url","updateFeatures","_a","body","features","providerKey","providerName","Injectable","args","providedIn","RestService","Store","FeatureManagementState","featureManagementService","_b","patchState","pipe","tap","_","tslib_1.__decorate","Action","Selector","State","name","defaults","FeatureManagementComponent","visibleChange","EventEmitter","modalBusy","_visible","value","emit","openModal","Error","_this","dispatch","pluck","subscribe","buildForm","formGroupObj","FormControl","form","FormGroup","save","selectSnapshot","map","feature","visible","Component","selector","template","Input","Output","Select","Observable","FeatureManagementModule","NgModule","declarations","imports","CoreModule","ThemeSharedModule","NgxsModule","forFeature","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n 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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { FeatureManagement } from '../models';\n\nexport class GetFeatures {\n static readonly type = '[FeatureManagement] Get Features';\n constructor(public payload: FeatureManagement.Provider) {}\n}\n\nexport class UpdateFeatures {\n static readonly type = '[FeatureManagement] Update Features';\n constructor(public payload: FeatureManagement.Provider & FeatureManagement.Features) {}\n}\n","import { Injectable } from '@angular/core';\nimport { RestService, Rest } from '@abp/ng.core';\nimport { Store } from '@ngxs/store';\nimport { Observable } from 'rxjs';\nimport { FeatureManagement } from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FeatureManagementService {\n constructor(private rest: RestService, private store: Store) {}\n\n getFeatures(params: FeatureManagement.Provider): Observable {\n const request: Rest.Request = {\n method: 'GET',\n url: '/api/abp/features',\n params,\n };\n return this.rest.request(request);\n }\n\n updateFeatures({\n features,\n providerKey,\n providerName,\n }: FeatureManagement.Provider & FeatureManagement.Features): Observable {\n const request: Rest.Request = {\n method: 'PUT',\n url: '/api/abp/features',\n body: { features },\n params: { providerKey, providerName },\n };\n return this.rest.request(request);\n }\n}\n","import { Action, Selector, State, StateContext } from '@ngxs/store';\nimport { tap } from 'rxjs/operators';\nimport { GetFeatures, UpdateFeatures } from '../actions/feature-management.actions';\nimport { FeatureManagement } from '../models/feature-management';\nimport { FeatureManagementService } from '../services/feature-management.service';\n\n@State({\n name: 'FeatureManagementState',\n defaults: { features: {} } as FeatureManagement.State,\n})\nexport class FeatureManagementState {\n @Selector()\n static getFeatures({ features }: FeatureManagement.State) {\n return features;\n }\n\n constructor(private featureManagementService: FeatureManagementService) {}\n\n @Action(GetFeatures)\n getFeatures({ patchState }: StateContext, { payload }: GetFeatures) {\n return this.featureManagementService.getFeatures(payload).pipe(\n tap(({ features }) =>\n patchState({\n features,\n }),\n ),\n );\n }\n\n @Action(UpdateFeatures)\n updateFeatures(_, { payload }: UpdateFeatures) {\n return this.featureManagementService.updateFeatures(payload);\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { Observable } from 'rxjs';\nimport { GetFeatures, UpdateFeatures } from '../../actions';\nimport { FeatureManagement } from '../../models/feature-management';\nimport { FeatureManagementState } from '../../states';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { pluck, tap } from 'rxjs/operators';\n\n@Component({\n selector: 'abp-feature-management',\n templateUrl: './feature-management.component.html',\n})\nexport class FeatureManagementComponent {\n @Input()\n providerKey: string;\n\n @Input()\n providerName: string;\n\n protected _visible;\n\n @Input()\n get visible(): boolean {\n return this._visible;\n }\n\n set visible(value: boolean) {\n this._visible = value;\n this.visibleChange.emit(value);\n\n if (value) this.openModal();\n }\n\n @Output()\n visibleChange = new EventEmitter();\n\n @Select(FeatureManagementState.getFeatures)\n features$: Observable;\n\n modalBusy: boolean = false;\n\n form: FormGroup;\n\n constructor(private store: Store) {}\n\n openModal() {\n if (!this.providerKey || !this.providerName) {\n throw new Error('Provider Key and Provider Name are required.');\n }\n\n this.getFeatures();\n }\n\n getFeatures() {\n this.store\n .dispatch(new GetFeatures({ providerKey: this.providerKey, providerName: this.providerName }))\n .pipe(pluck('FeatureManagementState', 'features'))\n .subscribe(features => {\n this.buildForm(features);\n });\n }\n\n buildForm(features) {\n const formGroupObj = {};\n\n for (let i = 0; i < features.length; i++) {\n formGroupObj[i] = new FormControl(features[i].value === 'false' ? null : features[i].value);\n }\n\n this.form = new FormGroup(formGroupObj);\n }\n\n save() {\n this.modalBusy = true;\n\n let features = this.store.selectSnapshot(FeatureManagementState.getFeatures);\n\n features = features.map((feature, i) => ({\n name: feature.name,\n value: !this.form.value[i] || this.form.value[i] === 'false' ? null : this.form.value[i],\n }));\n\n this.store\n .dispatch(\n new UpdateFeatures({\n providerKey: this.providerKey,\n providerName: this.providerName,\n features,\n }),\n )\n .subscribe(() => {\n this.modalBusy = false;\n this.visible = false;\n });\n }\n}\n","import { CoreModule } from '@abp/ng.core';\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\nimport { NgModule } from '@angular/core';\nimport { FeatureManagementComponent } from './components/feature-management/feature-management.component';\nimport { NgxsModule } from '@ngxs/store';\nimport { FeatureManagementState } from './states/feature-management.state';\n\n@NgModule({\n declarations: [FeatureManagementComponent],\n imports: [CoreModule, ThemeSharedModule, NgxsModule.forFeature([FeatureManagementState])],\n exports: [FeatureManagementComponent],\n})\nexport class FeatureManagementModule {}\n"]}
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm2015/abp-ng.feature-management.js b/npm/ng-packs/dist/feature-management/esm2015/abp-ng.feature-management.js
new file mode 100644
index 0000000000..c84f215508
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm2015/abp-ng.feature-management.js
@@ -0,0 +1,14 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+/**
+ * Generated bundle index. Do not edit.
+ */
+export { FeatureManagementModule, FeatureManagementComponent } from './public-api';
+export { GetFeatures as ɵe, UpdateFeatures as ɵf } from './lib/actions/feature-management.actions';
+export { FeatureManagementComponent as ɵa } from './lib/components/feature-management/feature-management.component';
+export { FeatureManagementService as ɵd } from './lib/services/feature-management.service';
+export { FeatureManagementState as ɵb } from './lib/states';
+export { FeatureManagementState as ɵc } from './lib/states/feature-management.state';
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJwLW5nLmZlYXR1cmUtbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhYnAvbmcuZmVhdHVyZS1tYW5hZ2VtZW50LyIsInNvdXJjZXMiOlsiYWJwLW5nLmZlYXR1cmUtbWFuYWdlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSUEsb0VBQWMsY0FBYyxDQUFDO0FBRTdCLE9BQU8sRUFBQyxXQUFXLElBQUksRUFBRSxFQUFDLGNBQWMsSUFBSSxFQUFFLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRyxPQUFPLEVBQUMsMEJBQTBCLElBQUksRUFBRSxFQUFDLE1BQU0sa0VBQWtFLENBQUM7QUFFbEgsT0FBTyxFQUFDLHdCQUF3QixJQUFJLEVBQUUsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ3pGLE9BQU8sRUFBQyxzQkFBc0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUQsT0FBTyxFQUFDLHNCQUFzQixJQUFJLEVBQUUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuXG5leHBvcnQge0dldEZlYXR1cmVzIGFzIMm1ZSxVcGRhdGVGZWF0dXJlcyBhcyDJtWZ9IGZyb20gJy4vbGliL2FjdGlvbnMvZmVhdHVyZS1tYW5hZ2VtZW50LmFjdGlvbnMnO1xuZXhwb3J0IHtGZWF0dXJlTWFuYWdlbWVudENvbXBvbmVudCBhcyDJtWF9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvZmVhdHVyZS1tYW5hZ2VtZW50L2ZlYXR1cmUtbWFuYWdlbWVudC5jb21wb25lbnQnO1xuZXhwb3J0IHtGZWF0dXJlTWFuYWdlbWVudCBhcyDJtWd9IGZyb20gJy4vbGliL21vZGVscyc7XG5leHBvcnQge0ZlYXR1cmVNYW5hZ2VtZW50U2VydmljZSBhcyDJtWR9IGZyb20gJy4vbGliL3NlcnZpY2VzL2ZlYXR1cmUtbWFuYWdlbWVudC5zZXJ2aWNlJztcbmV4cG9ydCB7RmVhdHVyZU1hbmFnZW1lbnRTdGF0ZSBhcyDJtWJ9IGZyb20gJy4vbGliL3N0YXRlcyc7XG5leHBvcnQge0ZlYXR1cmVNYW5hZ2VtZW50U3RhdGUgYXMgybVjfSBmcm9tICcuL2xpYi9zdGF0ZXMvZmVhdHVyZS1tYW5hZ2VtZW50LnN0YXRlJzsiXX0=
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm2015/lib/actions/feature-management.actions.js b/npm/ng-packs/dist/feature-management/esm2015/lib/actions/feature-management.actions.js
new file mode 100644
index 0000000000..741e4b7db2
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm2015/lib/actions/feature-management.actions.js
@@ -0,0 +1,35 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+export class GetFeatures {
+ /**
+ * @param {?} payload
+ */
+ constructor(payload) {
+ this.payload = payload;
+ }
+}
+GetFeatures.type = '[FeatureManagement] Get Features';
+if (false) {
+ /** @type {?} */
+ GetFeatures.type;
+ /** @type {?} */
+ GetFeatures.prototype.payload;
+}
+export class UpdateFeatures {
+ /**
+ * @param {?} payload
+ */
+ constructor(payload) {
+ this.payload = payload;
+ }
+}
+UpdateFeatures.type = '[FeatureManagement] Update Features';
+if (false) {
+ /** @type {?} */
+ UpdateFeatures.type;
+ /** @type {?} */
+ UpdateFeatures.prototype.payload;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50LmFjdGlvbnMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWJwL25nLmZlYXR1cmUtbWFuYWdlbWVudC8iLCJzb3VyY2VzIjpbImxpYi9hY3Rpb25zL2ZlYXR1cmUtbWFuYWdlbWVudC5hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFFQSxNQUFNLE9BQU8sV0FBVzs7OztJQUV0QixZQUFtQixPQUFtQztRQUFuQyxZQUFPLEdBQVAsT0FBTyxDQUE0QjtJQUFHLENBQUM7O0FBRDFDLGdCQUFJLEdBQUcsa0NBQWtDLENBQUM7OztJQUExRCxpQkFBMEQ7O0lBQzlDLDhCQUEwQzs7QUFHeEQsTUFBTSxPQUFPLGNBQWM7Ozs7SUFFekIsWUFBbUIsT0FBZ0U7UUFBaEUsWUFBTyxHQUFQLE9BQU8sQ0FBeUQ7SUFBRyxDQUFDOztBQUR2RSxtQkFBSSxHQUFHLHFDQUFxQyxDQUFDOzs7SUFBN0Qsb0JBQTZEOztJQUNqRCxpQ0FBdUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGZWF0dXJlTWFuYWdlbWVudCB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBHZXRGZWF0dXJlcyB7XG4gIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tGZWF0dXJlTWFuYWdlbWVudF0gR2V0IEZlYXR1cmVzJztcbiAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ6IEZlYXR1cmVNYW5hZ2VtZW50LlByb3ZpZGVyKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlRmVhdHVyZXMge1xuICBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbRmVhdHVyZU1hbmFnZW1lbnRdIFVwZGF0ZSBGZWF0dXJlcyc7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXlsb2FkOiBGZWF0dXJlTWFuYWdlbWVudC5Qcm92aWRlciAmIEZlYXR1cmVNYW5hZ2VtZW50LkZlYXR1cmVzKSB7fVxufVxuIl19
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm2015/lib/actions/index.js b/npm/ng-packs/dist/feature-management/esm2015/lib/actions/index.js
new file mode 100644
index 0000000000..85625dd355
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm2015/lib/actions/index.js
@@ -0,0 +1,6 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+export { GetFeatures, UpdateFeatures } from './feature-management.actions';
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWJwL25nLmZlYXR1cmUtbWFuYWdlbWVudC8iLCJzb3VyY2VzIjpbImxpYi9hY3Rpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw0Q0FBYyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZmVhdHVyZS1tYW5hZ2VtZW50LmFjdGlvbnMnO1xuIl19
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm2015/lib/components/feature-management/feature-management.component.js b/npm/ng-packs/dist/feature-management/esm2015/lib/components/feature-management/feature-management.component.js
new file mode 100644
index 0000000000..b3f483e624
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm2015/lib/components/feature-management/feature-management.component.js
@@ -0,0 +1,149 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+import * as tslib_1 from "tslib";
+import { Component, EventEmitter, Input, Output } from '@angular/core';
+import { Select, Store } from '@ngxs/store';
+import { Observable } from 'rxjs';
+import { GetFeatures, UpdateFeatures } from '../../actions';
+import { FeatureManagementState } from '../../states';
+import { FormGroup, FormControl } from '@angular/forms';
+import { pluck } from 'rxjs/operators';
+export class FeatureManagementComponent {
+ /**
+ * @param {?} store
+ */
+ constructor(store) {
+ this.store = store;
+ this.visibleChange = new EventEmitter();
+ this.modalBusy = false;
+ }
+ /**
+ * @return {?}
+ */
+ get visible() {
+ return this._visible;
+ }
+ /**
+ * @param {?} value
+ * @return {?}
+ */
+ set visible(value) {
+ this._visible = value;
+ this.visibleChange.emit(value);
+ if (value)
+ this.openModal();
+ }
+ /**
+ * @return {?}
+ */
+ openModal() {
+ if (!this.providerKey || !this.providerName) {
+ throw new Error('Provider Key and Provider Name are required.');
+ }
+ this.getFeatures();
+ }
+ /**
+ * @return {?}
+ */
+ getFeatures() {
+ this.store
+ .dispatch(new GetFeatures({ providerKey: this.providerKey, providerName: this.providerName }))
+ .pipe(pluck('FeatureManagementState', 'features'))
+ .subscribe((/**
+ * @param {?} features
+ * @return {?}
+ */
+ features => {
+ this.buildForm(features);
+ }));
+ }
+ /**
+ * @param {?} features
+ * @return {?}
+ */
+ buildForm(features) {
+ /** @type {?} */
+ const formGroupObj = {};
+ for (let i = 0; i < features.length; i++) {
+ formGroupObj[i] = new FormControl(features[i].value === 'false' ? null : features[i].value);
+ }
+ this.form = new FormGroup(formGroupObj);
+ }
+ /**
+ * @return {?}
+ */
+ save() {
+ this.modalBusy = true;
+ /** @type {?} */
+ let features = this.store.selectSnapshot(FeatureManagementState.getFeatures);
+ features = features.map((/**
+ * @param {?} feature
+ * @param {?} i
+ * @return {?}
+ */
+ (feature, i) => ({
+ name: feature.name,
+ value: !this.form.value[i] || this.form.value[i] === 'false' ? null : this.form.value[i],
+ })));
+ this.store
+ .dispatch(new UpdateFeatures({
+ providerKey: this.providerKey,
+ providerName: this.providerName,
+ features,
+ }))
+ .subscribe((/**
+ * @return {?}
+ */
+ () => {
+ this.modalBusy = false;
+ this.visible = false;
+ }));
+ }
+}
+FeatureManagementComponent.decorators = [
+ { type: Component, args: [{
+ selector: 'abp-feature-management',
+ template: "\n \n {{ 'AbpTenantManagement::Permission:ManageFeatures' | abpLocalization }}
\n \n\n \n \n \n\n \n \n \n {{ 'AbpFeatureManagement::Save' | abpLocalization }}\n \n \n\n"
+ }] }
+];
+/** @nocollapse */
+FeatureManagementComponent.ctorParameters = () => [
+ { type: Store }
+];
+FeatureManagementComponent.propDecorators = {
+ providerKey: [{ type: Input }],
+ providerName: [{ type: Input }],
+ visible: [{ type: Input }],
+ visibleChange: [{ type: Output }]
+};
+tslib_1.__decorate([
+ Select(FeatureManagementState.getFeatures),
+ tslib_1.__metadata("design:type", Observable)
+], FeatureManagementComponent.prototype, "features$", void 0);
+if (false) {
+ /** @type {?} */
+ FeatureManagementComponent.prototype.providerKey;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.providerName;
+ /**
+ * @type {?}
+ * @protected
+ */
+ FeatureManagementComponent.prototype._visible;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.visibleChange;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.features$;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.modalBusy;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.form;
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementComponent.prototype.store;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhYnAvbmcuZmVhdHVyZS1tYW5hZ2VtZW50LyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZmVhdHVyZS1tYW5hZ2VtZW50L2ZlYXR1cmUtbWFuYWdlbWVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQU01QyxNQUFNLE9BQU8sMEJBQTBCOzs7O0lBK0JyQyxZQUFvQixLQUFZO1FBQVosVUFBSyxHQUFMLEtBQUssQ0FBTztRQVRoQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFLNUMsY0FBUyxHQUFZLEtBQUssQ0FBQztJQUlRLENBQUM7Ozs7SUF0QnBDLElBQ0ksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDOzs7OztJQUVELElBQUksT0FBTyxDQUFDLEtBQWM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFL0IsSUFBSSxLQUFLO1lB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Y25CLG1EQUM0Qzs7SUFFNUMsK0NBQ21EOztJQUVuRCwrQ0FBMkI7O0lBRTNCLDBDQUFnQjs7Ozs7SUFFSiwyQ0FBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR2V0RmVhdHVyZXMsIFVwZGF0ZUZlYXR1cmVzIH0gZnJvbSAnLi4vLi4vYWN0aW9ucyc7XG5pbXBvcnQgeyBGZWF0dXJlTWFuYWdlbWVudCB9IGZyb20gJy4uLy4uL21vZGVscy9mZWF0dXJlLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgRmVhdHVyZU1hbmFnZW1lbnRTdGF0ZSB9IGZyb20gJy4uLy4uL3N0YXRlcyc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgcGx1Y2ssIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWJwLWZlYXR1cmUtbWFuYWdlbWVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWF0dXJlLW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBGZWF0dXJlTWFuYWdlbWVudENvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHByb3ZpZGVyS2V5OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHJvdmlkZXJOYW1lOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIF92aXNpYmxlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICB9XG5cbiAgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodmFsdWUpO1xuXG4gICAgaWYgKHZhbHVlKSB0aGlzLm9wZW5Nb2RhbCgpO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQFNlbGVjdChGZWF0dXJlTWFuYWdlbWVudFN0YXRlLmdldEZlYXR1cmVzKVxuICBmZWF0dXJlcyQ6IE9ic2VydmFibGU8RmVhdHVyZU1hbmFnZW1lbnQuRmVhdHVyZVtdPjtcblxuICBtb2RhbEJ1c3k6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBmb3JtOiBGb3JtR3JvdXA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogU3RvcmUpIHt9XG5cbiAgb3Blbk1vZGFsKCkge1xuICAgIGlmICghdGhpcy5wcm92aWRlcktleSB8fCAhdGhpcy5wcm92aWRlck5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvdmlkZXIgS2V5IGFuZCBQcm92aWRlciBOYW1lIGFyZSByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmdldEZlYXR1cmVzKCk7XG4gIH1cblxuICBnZXRGZWF0dXJlcygpIHtcbiAgICB0aGlzLnN0b3JlXG4gICAgICAuZGlzcGF0Y2gobmV3IEdldEZlYXR1cmVzKHsgcHJvdmlkZXJLZXk6IHRoaXMucHJvdmlkZXJLZXksIHByb3ZpZGVyTmFtZTogdGhpcy5wcm92aWRlck5hbWUgfSkpXG4gICAgICAucGlwZShwbHVjaygnRmVhdHVyZU1hbmFnZW1lbnRTdGF0ZScsICdmZWF0dXJlcycpKVxuICAgICAgLnN1YnNjcmliZShmZWF0dXJlcyA9PiB7XG4gICAgICAgIHRoaXMuYnVpbGRGb3JtKGZlYXR1cmVzKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYnVpbGRGb3JtKGZlYXR1cmVzKSB7XG4gICAgY29uc3QgZm9ybUdyb3VwT2JqID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3JtR3JvdXBPYmpbaV0gPSBuZXcgRm9ybUNvbnRyb2woZmVhdHVyZXNbaV0udmFsdWUgPT09ICdmYWxzZScgPyBudWxsIDogZmVhdHVyZXNbaV0udmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoZm9ybUdyb3VwT2JqKTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgdGhpcy5tb2RhbEJ1c3kgPSB0cnVlO1xuXG4gICAgbGV0IGZlYXR1cmVzID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGZWF0dXJlTWFuYWdlbWVudFN0YXRlLmdldEZlYXR1cmVzKTtcblxuICAgIGZlYXR1cmVzID0gZmVhdHVyZXMubWFwKChmZWF0dXJlLCBpKSA9PiAoe1xuICAgICAgbmFtZTogZmVhdHVyZS5uYW1lLFxuICAgICAgdmFsdWU6ICF0aGlzLmZvcm0udmFsdWVbaV0gfHwgdGhpcy5mb3JtLnZhbHVlW2ldID09PSAnZmFsc2UnID8gbnVsbCA6IHRoaXMuZm9ybS52YWx1ZVtpXSxcbiAgICB9KSk7XG5cbiAgICB0aGlzLnN0b3JlXG4gICAgICAuZGlzcGF0Y2goXG4gICAgICAgIG5ldyBVcGRhdGVGZWF0dXJlcyh7XG4gICAgICAgICAgcHJvdmlkZXJLZXk6IHRoaXMucHJvdmlkZXJLZXksXG4gICAgICAgICAgcHJvdmlkZXJOYW1lOiB0aGlzLnByb3ZpZGVyTmFtZSxcbiAgICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5tb2RhbEJ1c3kgPSBmYWxzZTtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxufVxuIl19
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm2015/lib/components/index.js b/npm/ng-packs/dist/feature-management/esm2015/lib/components/index.js
new file mode 100644
index 0000000000..6b85ebc3c5
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm2015/lib/components/index.js
@@ -0,0 +1,6 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+export { FeatureManagementComponent } from './feature-management/feature-management.component';
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWJwL25nLmZlYXR1cmUtbWFuYWdlbWVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSwyQ0FBYyxtREFBbUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZmVhdHVyZS1tYW5hZ2VtZW50L2ZlYXR1cmUtbWFuYWdlbWVudC5jb21wb25lbnQnO1xuIl19
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm2015/lib/feature-management.module.js b/npm/ng-packs/dist/feature-management/esm2015/lib/feature-management.module.js
new file mode 100644
index 0000000000..5142e83ff3
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm2015/lib/feature-management.module.js
@@ -0,0 +1,20 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+import { CoreModule } from '@abp/ng.core';
+import { ThemeSharedModule } from '@abp/ng.theme.shared';
+import { NgModule } from '@angular/core';
+import { FeatureManagementComponent } from './components/feature-management/feature-management.component';
+import { NgxsModule } from '@ngxs/store';
+import { FeatureManagementState } from './states/feature-management.state';
+export class FeatureManagementModule {
+}
+FeatureManagementModule.decorators = [
+ { type: NgModule, args: [{
+ declarations: [FeatureManagementComponent],
+ imports: [CoreModule, ThemeSharedModule, NgxsModule.forFeature([FeatureManagementState])],
+ exports: [FeatureManagementComponent],
+ },] }
+];
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhYnAvbmcuZmVhdHVyZS1tYW5hZ2VtZW50LyIsInNvdXJjZXMiOlsibGliL2ZlYXR1cmUtbWFuYWdlbWVudC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBTzNFLE1BQU0sT0FBTyx1QkFBdUI7OztZQUxuQyxRQUFRLFNBQUM7Z0JBQ1IsWUFBWSxFQUFFLENBQUMsMEJBQTBCLENBQUM7Z0JBQzFDLE9BQU8sRUFBRSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO2dCQUN6RixPQUFPLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQzthQUN0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvcmVNb2R1bGUgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xuaW1wb3J0IHsgVGhlbWVTaGFyZWRNb2R1bGUgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmVhdHVyZU1hbmFnZW1lbnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZmVhdHVyZS1tYW5hZ2VtZW50L2ZlYXR1cmUtbWFuYWdlbWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd4c01vZHVsZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IEZlYXR1cmVNYW5hZ2VtZW50U3RhdGUgfSBmcm9tICcuL3N0YXRlcy9mZWF0dXJlLW1hbmFnZW1lbnQuc3RhdGUnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtGZWF0dXJlTWFuYWdlbWVudENvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtDb3JlTW9kdWxlLCBUaGVtZVNoYXJlZE1vZHVsZSwgTmd4c01vZHVsZS5mb3JGZWF0dXJlKFtGZWF0dXJlTWFuYWdlbWVudFN0YXRlXSldLFxuICBleHBvcnRzOiBbRmVhdHVyZU1hbmFnZW1lbnRDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBGZWF0dXJlTWFuYWdlbWVudE1vZHVsZSB7fVxuIl19
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm2015/lib/models/feature-management.js b/npm/ng-packs/dist/feature-management/esm2015/lib/models/feature-management.js
new file mode 100644
index 0000000000..0305b2db6b
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm2015/lib/models/feature-management.js
@@ -0,0 +1,69 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+export var FeatureManagement;
+(function (FeatureManagement) {
+ /**
+ * @record
+ */
+ function State() { }
+ FeatureManagement.State = State;
+ if (false) {
+ /** @type {?} */
+ State.prototype.features;
+ }
+ /**
+ * @record
+ */
+ function ValueType() { }
+ FeatureManagement.ValueType = ValueType;
+ if (false) {
+ /** @type {?} */
+ ValueType.prototype.name;
+ /** @type {?} */
+ ValueType.prototype.properties;
+ /** @type {?} */
+ ValueType.prototype.validator;
+ }
+ /**
+ * @record
+ */
+ function Feature() { }
+ FeatureManagement.Feature = Feature;
+ if (false) {
+ /** @type {?} */
+ Feature.prototype.name;
+ /** @type {?} */
+ Feature.prototype.value;
+ /** @type {?|undefined} */
+ Feature.prototype.description;
+ /** @type {?|undefined} */
+ Feature.prototype.valueType;
+ /** @type {?|undefined} */
+ Feature.prototype.depth;
+ /** @type {?|undefined} */
+ Feature.prototype.parentName;
+ }
+ /**
+ * @record
+ */
+ function Features() { }
+ FeatureManagement.Features = Features;
+ if (false) {
+ /** @type {?} */
+ Features.prototype.features;
+ }
+ /**
+ * @record
+ */
+ function Provider() { }
+ FeatureManagement.Provider = Provider;
+ if (false) {
+ /** @type {?} */
+ Provider.prototype.providerName;
+ /** @type {?} */
+ Provider.prototype.providerKey;
+ }
+})(FeatureManagement || (FeatureManagement = {}));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFicC9uZy5mZWF0dXJlLW1hbmFnZW1lbnQvIiwic291cmNlcyI6WyJsaWIvbW9kZWxzL2ZlYXR1cmUtbWFuYWdlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsTUFBTSxLQUFXLGlCQUFpQixDQTRCakM7QUE1QkQsV0FBaUIsaUJBQWlCOzs7O0lBQ2hDLG9CQUVDOzs7O1FBREMseUJBQW9COzs7OztJQUd0Qix3QkFJQzs7OztRQUhDLHlCQUFhOztRQUNiLCtCQUFtQjs7UUFDbkIsOEJBQWtCOzs7OztJQUdwQixzQkFPQzs7OztRQU5DLHVCQUFhOztRQUNiLHdCQUFjOztRQUNkLDhCQUFxQjs7UUFDckIsNEJBQXNCOztRQUN0Qix3QkFBZTs7UUFDZiw2QkFBb0I7Ozs7O0lBR3RCLHVCQUVDOzs7O1FBREMsNEJBQW9COzs7OztJQUd0Qix1QkFHQzs7OztRQUZDLGdDQUFxQjs7UUFDckIsK0JBQW9COztBQUV4QixDQUFDLEVBNUJnQixpQkFBaUIsS0FBakIsaUJBQWlCLFFBNEJqQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBuYW1lc3BhY2UgRmVhdHVyZU1hbmFnZW1lbnQge1xuICBleHBvcnQgaW50ZXJmYWNlIFN0YXRlIHtcbiAgICBmZWF0dXJlczogRmVhdHVyZVtdO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBWYWx1ZVR5cGUge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwcm9wZXJ0aWVzOiBvYmplY3Q7XG4gICAgdmFsaWRhdG9yOiBvYmplY3Q7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEZlYXR1cmUge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIHZhbHVlVHlwZT86IFZhbHVlVHlwZTtcbiAgICBkZXB0aD86IG51bWJlcjtcbiAgICBwYXJlbnROYW1lPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlcyB7XG4gICAgZmVhdHVyZXM6IEZlYXR1cmVbXTtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXIge1xuICAgIHByb3ZpZGVyTmFtZTogc3RyaW5nO1xuICAgIHByb3ZpZGVyS2V5OiBzdHJpbmc7XG4gIH1cbn1cbiJdfQ==
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm2015/lib/models/index.js b/npm/ng-packs/dist/feature-management/esm2015/lib/models/index.js
new file mode 100644
index 0000000000..051244297f
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm2015/lib/models/index.js
@@ -0,0 +1,6 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+export {} from './feature-management';
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWJwL25nLmZlYXR1cmUtbWFuYWdlbWVudC8iLCJzb3VyY2VzIjpbImxpYi9tb2RlbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGVBQWMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2ZlYXR1cmUtbWFuYWdlbWVudCc7XG4iXX0=
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm2015/lib/services/feature-management.service.js b/npm/ng-packs/dist/feature-management/esm2015/lib/services/feature-management.service.js
new file mode 100644
index 0000000000..7a09704674
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm2015/lib/services/feature-management.service.js
@@ -0,0 +1,71 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+import { Injectable } from '@angular/core';
+import { RestService } from '@abp/ng.core';
+import { Store } from '@ngxs/store';
+import * as i0 from "@angular/core";
+import * as i1 from "@abp/ng.core";
+import * as i2 from "@ngxs/store";
+export class FeatureManagementService {
+ /**
+ * @param {?} rest
+ * @param {?} store
+ */
+ constructor(rest, store) {
+ this.rest = rest;
+ this.store = store;
+ }
+ /**
+ * @param {?} params
+ * @return {?}
+ */
+ getFeatures(params) {
+ /** @type {?} */
+ const request = {
+ method: 'GET',
+ url: '/api/abp/features',
+ params,
+ };
+ return this.rest.request(request);
+ }
+ /**
+ * @param {?} __0
+ * @return {?}
+ */
+ updateFeatures({ features, providerKey, providerName, }) {
+ /** @type {?} */
+ const request = {
+ method: 'PUT',
+ url: '/api/abp/features',
+ body: { features },
+ params: { providerKey, providerName },
+ };
+ return this.rest.request(request);
+ }
+}
+FeatureManagementService.decorators = [
+ { type: Injectable, args: [{
+ providedIn: 'root',
+ },] }
+];
+/** @nocollapse */
+FeatureManagementService.ctorParameters = () => [
+ { type: RestService },
+ { type: Store }
+];
+/** @nocollapse */ FeatureManagementService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function FeatureManagementService_Factory() { return new FeatureManagementService(i0.ɵɵinject(i1.RestService), i0.ɵɵinject(i2.Store)); }, token: FeatureManagementService, providedIn: "root" });
+if (false) {
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementService.prototype.rest;
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementService.prototype.store;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWJwL25nLmZlYXR1cmUtbWFuYWdlbWVudC8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9mZWF0dXJlLW1hbmFnZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFRLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7QUFPcEMsTUFBTSxPQUFPLHdCQUF3Qjs7Ozs7SUFDbkMsWUFBb0IsSUFBaUIsRUFBVSxLQUFZO1FBQXZDLFNBQUksR0FBSixJQUFJLENBQWE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFPO0lBQUcsQ0FBQzs7Ozs7SUFFL0QsV0FBVyxDQUFDLE1BQWtDOztjQUN0QyxPQUFPLEdBQXVCO1lBQ2xDLE1BQU0sRUFBRSxLQUFLO1lBQ2IsR0FBRyxFQUFFLG1CQUFtQjtZQUN4QixNQUFNO1NBQ1A7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUF5RCxPQUFPLENBQUMsQ0FBQztJQUM1RixDQUFDOzs7OztJQUVELGNBQWMsQ0FBQyxFQUNiLFFBQVEsRUFDUixXQUFXLEVBQ1gsWUFBWSxHQUM0Qzs7Y0FDbEQsT0FBTyxHQUE2QztZQUN4RCxNQUFNLEVBQUUsS0FBSztZQUNiLEdBQUcsRUFBRSxtQkFBbUI7WUFDeEIsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFO1lBQ2xCLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUU7U0FDdEM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFtQyxPQUFPLENBQUMsQ0FBQztJQUN0RSxDQUFDOzs7WUEzQkYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7O1lBUFEsV0FBVztZQUNYLEtBQUs7Ozs7Ozs7O0lBUUEsd0NBQXlCOzs7OztJQUFFLHlDQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlLCBSZXN0IH0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmVhdHVyZU1hbmFnZW1lbnQgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRmVhdHVyZU1hbmFnZW1lbnRTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXN0OiBSZXN0U2VydmljZSwgcHJpdmF0ZSBzdG9yZTogU3RvcmUpIHt9XG5cbiAgZ2V0RmVhdHVyZXMocGFyYW1zOiBGZWF0dXJlTWFuYWdlbWVudC5Qcm92aWRlcik6IE9ic2VydmFibGU8RmVhdHVyZU1hbmFnZW1lbnQuRmVhdHVyZXM+IHtcbiAgICBjb25zdCByZXF1ZXN0OiBSZXN0LlJlcXVlc3Q8bnVsbD4gPSB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgdXJsOiAnL2FwaS9hYnAvZmVhdHVyZXMnLFxuICAgICAgcGFyYW1zLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucmVzdC5yZXF1ZXN0PEZlYXR1cmVNYW5hZ2VtZW50LlByb3ZpZGVyLCBGZWF0dXJlTWFuYWdlbWVudC5GZWF0dXJlcz4ocmVxdWVzdCk7XG4gIH1cblxuICB1cGRhdGVGZWF0dXJlcyh7XG4gICAgZmVhdHVyZXMsXG4gICAgcHJvdmlkZXJLZXksXG4gICAgcHJvdmlkZXJOYW1lLFxuICB9OiBGZWF0dXJlTWFuYWdlbWVudC5Qcm92aWRlciAmIEZlYXR1cmVNYW5hZ2VtZW50LkZlYXR1cmVzKTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgY29uc3QgcmVxdWVzdDogUmVzdC5SZXF1ZXN0PEZlYXR1cmVNYW5hZ2VtZW50LkZlYXR1cmVzPiA9IHtcbiAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgICB1cmw6ICcvYXBpL2FicC9mZWF0dXJlcycsXG4gICAgICBib2R5OiB7IGZlYXR1cmVzIH0sXG4gICAgICBwYXJhbXM6IHsgcHJvdmlkZXJLZXksIHByb3ZpZGVyTmFtZSB9LFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucmVzdC5yZXF1ZXN0PEZlYXR1cmVNYW5hZ2VtZW50LkZlYXR1cmVzLCBudWxsPihyZXF1ZXN0KTtcbiAgfVxufVxuIl19
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm2015/lib/states/feature-management.state.js b/npm/ng-packs/dist/feature-management/esm2015/lib/states/feature-management.state.js
new file mode 100644
index 0000000000..87e67282c2
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm2015/lib/states/feature-management.state.js
@@ -0,0 +1,80 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+import * as tslib_1 from "tslib";
+import { Action, Selector, State } from '@ngxs/store';
+import { tap } from 'rxjs/operators';
+import { GetFeatures, UpdateFeatures } from '../actions/feature-management.actions';
+import { FeatureManagementService } from '../services/feature-management.service';
+let FeatureManagementState = class FeatureManagementState {
+ /**
+ * @param {?} featureManagementService
+ */
+ constructor(featureManagementService) {
+ this.featureManagementService = featureManagementService;
+ }
+ /**
+ * @param {?} __0
+ * @return {?}
+ */
+ static getFeatures({ features }) {
+ return features;
+ }
+ /**
+ * @param {?} __0
+ * @param {?} __1
+ * @return {?}
+ */
+ getFeatures({ patchState }, { payload }) {
+ return this.featureManagementService.getFeatures(payload).pipe(tap((/**
+ * @param {?} __0
+ * @return {?}
+ */
+ ({ features }) => patchState({
+ features,
+ }))));
+ }
+ /**
+ * @param {?} _
+ * @param {?} __1
+ * @return {?}
+ */
+ updateFeatures(_, { payload }) {
+ return this.featureManagementService.updateFeatures(payload);
+ }
+};
+tslib_1.__decorate([
+ Action(GetFeatures),
+ tslib_1.__metadata("design:type", Function),
+ tslib_1.__metadata("design:paramtypes", [Object, GetFeatures]),
+ tslib_1.__metadata("design:returntype", void 0)
+], FeatureManagementState.prototype, "getFeatures", null);
+tslib_1.__decorate([
+ Action(UpdateFeatures),
+ tslib_1.__metadata("design:type", Function),
+ tslib_1.__metadata("design:paramtypes", [Object, UpdateFeatures]),
+ tslib_1.__metadata("design:returntype", void 0)
+], FeatureManagementState.prototype, "updateFeatures", null);
+tslib_1.__decorate([
+ Selector(),
+ tslib_1.__metadata("design:type", Function),
+ tslib_1.__metadata("design:paramtypes", [Object]),
+ tslib_1.__metadata("design:returntype", void 0)
+], FeatureManagementState, "getFeatures", null);
+FeatureManagementState = tslib_1.__decorate([
+ State({
+ name: 'FeatureManagementState',
+ defaults: (/** @type {?} */ ({ features: {} })),
+ }),
+ tslib_1.__metadata("design:paramtypes", [FeatureManagementService])
+], FeatureManagementState);
+export { FeatureManagementState };
+if (false) {
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementState.prototype.featureManagementService;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50LnN0YXRlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFicC9uZy5mZWF0dXJlLW1hbmFnZW1lbnQvIiwic291cmNlcyI6WyJsaWIvc3RhdGVzL2ZlYXR1cmUtbWFuYWdlbWVudC5zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBZ0IsTUFBTSxhQUFhLENBQUM7QUFDcEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFcEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7SUFNckUsc0JBQXNCLFNBQXRCLHNCQUFzQjs7OztJQU1qQyxZQUFvQix3QkFBa0Q7UUFBbEQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtJQUFHLENBQUM7Ozs7O0lBSjFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQTJCO1FBQ3RELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Ozs7OztJQUtELFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBeUMsRUFBRSxFQUFFLE9BQU8sRUFBZTtRQUN6RixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM1RCxHQUFHOzs7O1FBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FDbkIsVUFBVSxDQUFDO1lBQ1QsUUFBUTtTQUNULENBQUMsRUFDSCxDQUNGLENBQUM7SUFDSixDQUFDOzs7Ozs7SUFHRCxjQUFjLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFrQjtRQUMzQyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNGLENBQUE7QUFkQztJQURDLE1BQU0sQ0FBQyxXQUFXLENBQUM7O3FEQUM0RCxXQUFXOzt5REFRMUY7QUFHRDtJQURDLE1BQU0sQ0FBQyxjQUFjLENBQUM7O3FEQUNRLGNBQWM7OzREQUU1QztBQXBCRDtJQURDLFFBQVEsRUFBRTs7OzsrQ0FHVjtBQUpVLHNCQUFzQjtJQUpsQyxLQUFLLENBQTBCO1FBQzlCLElBQUksRUFBRSx3QkFBd0I7UUFDOUIsUUFBUSxFQUFFLG1CQUFBLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUEyQjtLQUN0RCxDQUFDOzZDQU84Qyx3QkFBd0I7R0FOM0Qsc0JBQXNCLENBdUJsQztTQXZCWSxzQkFBc0I7Ozs7OztJQU1yQiwwREFBMEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0IH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgR2V0RmVhdHVyZXMsIFVwZGF0ZUZlYXR1cmVzIH0gZnJvbSAnLi4vYWN0aW9ucy9mZWF0dXJlLW1hbmFnZW1lbnQuYWN0aW9ucyc7XG5pbXBvcnQgeyBGZWF0dXJlTWFuYWdlbWVudCB9IGZyb20gJy4uL21vZGVscy9mZWF0dXJlLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgRmVhdHVyZU1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmVhdHVyZS1tYW5hZ2VtZW50LnNlcnZpY2UnO1xuXG5AU3RhdGU8RmVhdHVyZU1hbmFnZW1lbnQuU3RhdGU+KHtcbiAgbmFtZTogJ0ZlYXR1cmVNYW5hZ2VtZW50U3RhdGUnLFxuICBkZWZhdWx0czogeyBmZWF0dXJlczoge30gfSBhcyBGZWF0dXJlTWFuYWdlbWVudC5TdGF0ZSxcbn0pXG5leHBvcnQgY2xhc3MgRmVhdHVyZU1hbmFnZW1lbnRTdGF0ZSB7XG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBnZXRGZWF0dXJlcyh7IGZlYXR1cmVzIH06IEZlYXR1cmVNYW5hZ2VtZW50LlN0YXRlKSB7XG4gICAgcmV0dXJuIGZlYXR1cmVzO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmZWF0dXJlTWFuYWdlbWVudFNlcnZpY2U6IEZlYXR1cmVNYW5hZ2VtZW50U2VydmljZSkge31cblxuICBAQWN0aW9uKEdldEZlYXR1cmVzKVxuICBnZXRGZWF0dXJlcyh7IHBhdGNoU3RhdGUgfTogU3RhdGVDb250ZXh0PEZlYXR1cmVNYW5hZ2VtZW50LlN0YXRlPiwgeyBwYXlsb2FkIH06IEdldEZlYXR1cmVzKSB7XG4gICAgcmV0dXJuIHRoaXMuZmVhdHVyZU1hbmFnZW1lbnRTZXJ2aWNlLmdldEZlYXR1cmVzKHBheWxvYWQpLnBpcGUoXG4gICAgICB0YXAoKHsgZmVhdHVyZXMgfSkgPT5cbiAgICAgICAgcGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgZmVhdHVyZXMsXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgQEFjdGlvbihVcGRhdGVGZWF0dXJlcylcbiAgdXBkYXRlRmVhdHVyZXMoXywgeyBwYXlsb2FkIH06IFVwZGF0ZUZlYXR1cmVzKSB7XG4gICAgcmV0dXJuIHRoaXMuZmVhdHVyZU1hbmFnZW1lbnRTZXJ2aWNlLnVwZGF0ZUZlYXR1cmVzKHBheWxvYWQpO1xuICB9XG59XG4iXX0=
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm2015/lib/states/index.js b/npm/ng-packs/dist/feature-management/esm2015/lib/states/index.js
new file mode 100644
index 0000000000..9b8a3b3a43
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm2015/lib/states/index.js
@@ -0,0 +1,6 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+export { FeatureManagementState } from "./feature-management.state";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWJwL25nLmZlYXR1cmUtbWFuYWdlbWVudC8iLCJzb3VyY2VzIjpbImxpYi9zdGF0ZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHVDQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZmVhdHVyZS1tYW5hZ2VtZW50LnN0YXRlXCI7XG4iXX0=
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm2015/public-api.js b/npm/ng-packs/dist/feature-management/esm2015/public-api.js
new file mode 100644
index 0000000000..2ca23efea6
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm2015/public-api.js
@@ -0,0 +1,7 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+export { FeatureManagementModule } from './lib/feature-management.module';
+export { FeatureManagementComponent } from './lib/components';
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhYnAvbmcuZmVhdHVyZS1tYW5hZ2VtZW50LyIsInNvdXJjZXMiOlsicHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsd0NBQWMsaUNBQWlDLENBQUM7QUFDaEQsMkNBQWMsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9mZWF0dXJlLW1hbmFnZW1lbnQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMnO1xuIl19
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm5/abp-ng.feature-management.js b/npm/ng-packs/dist/feature-management/esm5/abp-ng.feature-management.js
new file mode 100644
index 0000000000..c84f215508
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm5/abp-ng.feature-management.js
@@ -0,0 +1,14 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+/**
+ * Generated bundle index. Do not edit.
+ */
+export { FeatureManagementModule, FeatureManagementComponent } from './public-api';
+export { GetFeatures as ɵe, UpdateFeatures as ɵf } from './lib/actions/feature-management.actions';
+export { FeatureManagementComponent as ɵa } from './lib/components/feature-management/feature-management.component';
+export { FeatureManagementService as ɵd } from './lib/services/feature-management.service';
+export { FeatureManagementState as ɵb } from './lib/states';
+export { FeatureManagementState as ɵc } from './lib/states/feature-management.state';
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJwLW5nLmZlYXR1cmUtbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhYnAvbmcuZmVhdHVyZS1tYW5hZ2VtZW50LyIsInNvdXJjZXMiOlsiYWJwLW5nLmZlYXR1cmUtbWFuYWdlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSUEsb0VBQWMsY0FBYyxDQUFDO0FBRTdCLE9BQU8sRUFBQyxXQUFXLElBQUksRUFBRSxFQUFDLGNBQWMsSUFBSSxFQUFFLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRyxPQUFPLEVBQUMsMEJBQTBCLElBQUksRUFBRSxFQUFDLE1BQU0sa0VBQWtFLENBQUM7QUFFbEgsT0FBTyxFQUFDLHdCQUF3QixJQUFJLEVBQUUsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ3pGLE9BQU8sRUFBQyxzQkFBc0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUQsT0FBTyxFQUFDLHNCQUFzQixJQUFJLEVBQUUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuXG5leHBvcnQge0dldEZlYXR1cmVzIGFzIMm1ZSxVcGRhdGVGZWF0dXJlcyBhcyDJtWZ9IGZyb20gJy4vbGliL2FjdGlvbnMvZmVhdHVyZS1tYW5hZ2VtZW50LmFjdGlvbnMnO1xuZXhwb3J0IHtGZWF0dXJlTWFuYWdlbWVudENvbXBvbmVudCBhcyDJtWF9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvZmVhdHVyZS1tYW5hZ2VtZW50L2ZlYXR1cmUtbWFuYWdlbWVudC5jb21wb25lbnQnO1xuZXhwb3J0IHtGZWF0dXJlTWFuYWdlbWVudCBhcyDJtWd9IGZyb20gJy4vbGliL21vZGVscyc7XG5leHBvcnQge0ZlYXR1cmVNYW5hZ2VtZW50U2VydmljZSBhcyDJtWR9IGZyb20gJy4vbGliL3NlcnZpY2VzL2ZlYXR1cmUtbWFuYWdlbWVudC5zZXJ2aWNlJztcbmV4cG9ydCB7RmVhdHVyZU1hbmFnZW1lbnRTdGF0ZSBhcyDJtWJ9IGZyb20gJy4vbGliL3N0YXRlcyc7XG5leHBvcnQge0ZlYXR1cmVNYW5hZ2VtZW50U3RhdGUgYXMgybVjfSBmcm9tICcuL2xpYi9zdGF0ZXMvZmVhdHVyZS1tYW5hZ2VtZW50LnN0YXRlJzsiXX0=
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm5/lib/actions/feature-management.actions.js b/npm/ng-packs/dist/feature-management/esm5/lib/actions/feature-management.actions.js
new file mode 100644
index 0000000000..6313fd45f3
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm5/lib/actions/feature-management.actions.js
@@ -0,0 +1,33 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+var GetFeatures = /** @class */ (function () {
+ function GetFeatures(payload) {
+ this.payload = payload;
+ }
+ GetFeatures.type = '[FeatureManagement] Get Features';
+ return GetFeatures;
+}());
+export { GetFeatures };
+if (false) {
+ /** @type {?} */
+ GetFeatures.type;
+ /** @type {?} */
+ GetFeatures.prototype.payload;
+}
+var UpdateFeatures = /** @class */ (function () {
+ function UpdateFeatures(payload) {
+ this.payload = payload;
+ }
+ UpdateFeatures.type = '[FeatureManagement] Update Features';
+ return UpdateFeatures;
+}());
+export { UpdateFeatures };
+if (false) {
+ /** @type {?} */
+ UpdateFeatures.type;
+ /** @type {?} */
+ UpdateFeatures.prototype.payload;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50LmFjdGlvbnMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWJwL25nLmZlYXR1cmUtbWFuYWdlbWVudC8iLCJzb3VyY2VzIjpbImxpYi9hY3Rpb25zL2ZlYXR1cmUtbWFuYWdlbWVudC5hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFFQTtJQUVFLHFCQUFtQixPQUFtQztRQUFuQyxZQUFPLEdBQVAsT0FBTyxDQUE0QjtJQUFHLENBQUM7SUFEMUMsZ0JBQUksR0FBRyxrQ0FBa0MsQ0FBQztJQUU1RCxrQkFBQztDQUFBLEFBSEQsSUFHQztTQUhZLFdBQVc7OztJQUN0QixpQkFBMEQ7O0lBQzlDLDhCQUEwQzs7QUFHeEQ7SUFFRSx3QkFBbUIsT0FBZ0U7UUFBaEUsWUFBTyxHQUFQLE9BQU8sQ0FBeUQ7SUFBRyxDQUFDO0lBRHZFLG1CQUFJLEdBQUcscUNBQXFDLENBQUM7SUFFL0QscUJBQUM7Q0FBQSxBQUhELElBR0M7U0FIWSxjQUFjOzs7SUFDekIsb0JBQTZEOztJQUNqRCxpQ0FBdUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGZWF0dXJlTWFuYWdlbWVudCB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBHZXRGZWF0dXJlcyB7XG4gIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tGZWF0dXJlTWFuYWdlbWVudF0gR2V0IEZlYXR1cmVzJztcbiAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ6IEZlYXR1cmVNYW5hZ2VtZW50LlByb3ZpZGVyKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlRmVhdHVyZXMge1xuICBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbRmVhdHVyZU1hbmFnZW1lbnRdIFVwZGF0ZSBGZWF0dXJlcyc7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXlsb2FkOiBGZWF0dXJlTWFuYWdlbWVudC5Qcm92aWRlciAmIEZlYXR1cmVNYW5hZ2VtZW50LkZlYXR1cmVzKSB7fVxufVxuIl19
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm5/lib/actions/index.js b/npm/ng-packs/dist/feature-management/esm5/lib/actions/index.js
new file mode 100644
index 0000000000..85625dd355
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm5/lib/actions/index.js
@@ -0,0 +1,6 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+export { GetFeatures, UpdateFeatures } from './feature-management.actions';
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWJwL25nLmZlYXR1cmUtbWFuYWdlbWVudC8iLCJzb3VyY2VzIjpbImxpYi9hY3Rpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw0Q0FBYyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZmVhdHVyZS1tYW5hZ2VtZW50LmFjdGlvbnMnO1xuIl19
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm5/lib/components/feature-management/feature-management.component.js b/npm/ng-packs/dist/feature-management/esm5/lib/components/feature-management/feature-management.component.js
new file mode 100644
index 0000000000..fce9f8c488
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm5/lib/components/feature-management/feature-management.component.js
@@ -0,0 +1,167 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+import * as tslib_1 from "tslib";
+import { Component, EventEmitter, Input, Output } from '@angular/core';
+import { Select, Store } from '@ngxs/store';
+import { Observable } from 'rxjs';
+import { GetFeatures, UpdateFeatures } from '../../actions';
+import { FeatureManagementState } from '../../states';
+import { FormGroup, FormControl } from '@angular/forms';
+import { pluck } from 'rxjs/operators';
+var FeatureManagementComponent = /** @class */ (function () {
+ function FeatureManagementComponent(store) {
+ this.store = store;
+ this.visibleChange = new EventEmitter();
+ this.modalBusy = false;
+ }
+ Object.defineProperty(FeatureManagementComponent.prototype, "visible", {
+ get: /**
+ * @return {?}
+ */
+ function () {
+ return this._visible;
+ },
+ set: /**
+ * @param {?} value
+ * @return {?}
+ */
+ function (value) {
+ this._visible = value;
+ this.visibleChange.emit(value);
+ if (value)
+ this.openModal();
+ },
+ enumerable: true,
+ configurable: true
+ });
+ /**
+ * @return {?}
+ */
+ FeatureManagementComponent.prototype.openModal = /**
+ * @return {?}
+ */
+ function () {
+ if (!this.providerKey || !this.providerName) {
+ throw new Error('Provider Key and Provider Name are required.');
+ }
+ this.getFeatures();
+ };
+ /**
+ * @return {?}
+ */
+ FeatureManagementComponent.prototype.getFeatures = /**
+ * @return {?}
+ */
+ function () {
+ var _this = this;
+ this.store
+ .dispatch(new GetFeatures({ providerKey: this.providerKey, providerName: this.providerName }))
+ .pipe(pluck('FeatureManagementState', 'features'))
+ .subscribe((/**
+ * @param {?} features
+ * @return {?}
+ */
+ function (features) {
+ _this.buildForm(features);
+ }));
+ };
+ /**
+ * @param {?} features
+ * @return {?}
+ */
+ FeatureManagementComponent.prototype.buildForm = /**
+ * @param {?} features
+ * @return {?}
+ */
+ function (features) {
+ /** @type {?} */
+ var formGroupObj = {};
+ for (var i = 0; i < features.length; i++) {
+ formGroupObj[i] = new FormControl(features[i].value === 'false' ? null : features[i].value);
+ }
+ this.form = new FormGroup(formGroupObj);
+ };
+ /**
+ * @return {?}
+ */
+ FeatureManagementComponent.prototype.save = /**
+ * @return {?}
+ */
+ function () {
+ var _this = this;
+ this.modalBusy = true;
+ /** @type {?} */
+ var features = this.store.selectSnapshot(FeatureManagementState.getFeatures);
+ features = features.map((/**
+ * @param {?} feature
+ * @param {?} i
+ * @return {?}
+ */
+ function (feature, i) { return ({
+ name: feature.name,
+ value: !_this.form.value[i] || _this.form.value[i] === 'false' ? null : _this.form.value[i],
+ }); }));
+ this.store
+ .dispatch(new UpdateFeatures({
+ providerKey: this.providerKey,
+ providerName: this.providerName,
+ features: features,
+ }))
+ .subscribe((/**
+ * @return {?}
+ */
+ function () {
+ _this.modalBusy = false;
+ _this.visible = false;
+ }));
+ };
+ FeatureManagementComponent.decorators = [
+ { type: Component, args: [{
+ selector: 'abp-feature-management',
+ template: "\n \n {{ 'AbpTenantManagement::Permission:ManageFeatures' | abpLocalization }}
\n \n\n \n \n \n\n \n \n \n {{ 'AbpFeatureManagement::Save' | abpLocalization }}\n \n \n\n"
+ }] }
+ ];
+ /** @nocollapse */
+ FeatureManagementComponent.ctorParameters = function () { return [
+ { type: Store }
+ ]; };
+ FeatureManagementComponent.propDecorators = {
+ providerKey: [{ type: Input }],
+ providerName: [{ type: Input }],
+ visible: [{ type: Input }],
+ visibleChange: [{ type: Output }]
+ };
+ tslib_1.__decorate([
+ Select(FeatureManagementState.getFeatures),
+ tslib_1.__metadata("design:type", Observable)
+ ], FeatureManagementComponent.prototype, "features$", void 0);
+ return FeatureManagementComponent;
+}());
+export { FeatureManagementComponent };
+if (false) {
+ /** @type {?} */
+ FeatureManagementComponent.prototype.providerKey;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.providerName;
+ /**
+ * @type {?}
+ * @protected
+ */
+ FeatureManagementComponent.prototype._visible;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.visibleChange;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.features$;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.modalBusy;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.form;
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementComponent.prototype.store;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhYnAvbmcuZmVhdHVyZS1tYW5hZ2VtZW50LyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZmVhdHVyZS1tYW5hZ2VtZW50L2ZlYXR1cmUtbWFuYWdlbWVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUU1QztJQW1DRSxvQ0FBb0IsS0FBWTtRQUFaLFVBQUssR0FBTCxLQUFLLENBQU87UUFUaEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBSzVDLGNBQVMsR0FBWSxLQUFLLENBQUM7SUFJUSxDQUFDO0lBdEJwQyxzQkFDSSwrQ0FBTzs7OztRQURYO1lBRUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUM7Ozs7O1FBRUQsVUFBWSxLQUFjO1lBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRS9CLElBQUksS0FBSztnQkFBRSxJQUFJLENBQUMsU0FBUyxFQUFF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Q0FBQztDQUFBLEFBdkZELElBdUZDO1NBbkZZLDBCQUEwQjs7O0lBQ3JDLGlEQUNvQjs7SUFFcEIsa0RBQ3FCOzs7OztJQUVyQiw4Q0FBbUI7O0lBY25CLG1EQUM0Qzs7SUFFNUMsK0NBQ21EOztJQUVuRCwrQ0FBMkI7O0lBRTNCLDBDQUFnQjs7Ozs7SUFFSiwyQ0FBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR2V0RmVhdHVyZXMsIFVwZGF0ZUZlYXR1cmVzIH0gZnJvbSAnLi4vLi4vYWN0aW9ucyc7XG5pbXBvcnQgeyBGZWF0dXJlTWFuYWdlbWVudCB9IGZyb20gJy4uLy4uL21vZGVscy9mZWF0dXJlLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgRmVhdHVyZU1hbmFnZW1lbnRTdGF0ZSB9IGZyb20gJy4uLy4uL3N0YXRlcyc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgcGx1Y2ssIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWJwLWZlYXR1cmUtbWFuYWdlbWVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWF0dXJlLW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBGZWF0dXJlTWFuYWdlbWVudENvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHByb3ZpZGVyS2V5OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHJvdmlkZXJOYW1lOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIF92aXNpYmxlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICB9XG5cbiAgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodmFsdWUpO1xuXG4gICAgaWYgKHZhbHVlKSB0aGlzLm9wZW5Nb2RhbCgpO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQFNlbGVjdChGZWF0dXJlTWFuYWdlbWVudFN0YXRlLmdldEZlYXR1cmVzKVxuICBmZWF0dXJlcyQ6IE9ic2VydmFibGU8RmVhdHVyZU1hbmFnZW1lbnQuRmVhdHVyZVtdPjtcblxuICBtb2RhbEJ1c3k6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBmb3JtOiBGb3JtR3JvdXA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogU3RvcmUpIHt9XG5cbiAgb3Blbk1vZGFsKCkge1xuICAgIGlmICghdGhpcy5wcm92aWRlcktleSB8fCAhdGhpcy5wcm92aWRlck5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvdmlkZXIgS2V5IGFuZCBQcm92aWRlciBOYW1lIGFyZSByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmdldEZlYXR1cmVzKCk7XG4gIH1cblxuICBnZXRGZWF0dXJlcygpIHtcbiAgICB0aGlzLnN0b3JlXG4gICAgICAuZGlzcGF0Y2gobmV3IEdldEZlYXR1cmVzKHsgcHJvdmlkZXJLZXk6IHRoaXMucHJvdmlkZXJLZXksIHByb3ZpZGVyTmFtZTogdGhpcy5wcm92aWRlck5hbWUgfSkpXG4gICAgICAucGlwZShwbHVjaygnRmVhdHVyZU1hbmFnZW1lbnRTdGF0ZScsICdmZWF0dXJlcycpKVxuICAgICAgLnN1YnNjcmliZShmZWF0dXJlcyA9PiB7XG4gICAgICAgIHRoaXMuYnVpbGRGb3JtKGZlYXR1cmVzKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYnVpbGRGb3JtKGZlYXR1cmVzKSB7XG4gICAgY29uc3QgZm9ybUdyb3VwT2JqID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3JtR3JvdXBPYmpbaV0gPSBuZXcgRm9ybUNvbnRyb2woZmVhdHVyZXNbaV0udmFsdWUgPT09ICdmYWxzZScgPyBudWxsIDogZmVhdHVyZXNbaV0udmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoZm9ybUdyb3VwT2JqKTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgdGhpcy5tb2RhbEJ1c3kgPSB0cnVlO1xuXG4gICAgbGV0IGZlYXR1cmVzID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGZWF0dXJlTWFuYWdlbWVudFN0YXRlLmdldEZlYXR1cmVzKTtcblxuICAgIGZlYXR1cmVzID0gZmVhdHVyZXMubWFwKChmZWF0dXJlLCBpKSA9PiAoe1xuICAgICAgbmFtZTogZmVhdHVyZS5uYW1lLFxuICAgICAgdmFsdWU6ICF0aGlzLmZvcm0udmFsdWVbaV0gfHwgdGhpcy5mb3JtLnZhbHVlW2ldID09PSAnZmFsc2UnID8gbnVsbCA6IHRoaXMuZm9ybS52YWx1ZVtpXSxcbiAgICB9KSk7XG5cbiAgICB0aGlzLnN0b3JlXG4gICAgICAuZGlzcGF0Y2goXG4gICAgICAgIG5ldyBVcGRhdGVGZWF0dXJlcyh7XG4gICAgICAgICAgcHJvdmlkZXJLZXk6IHRoaXMucHJvdmlkZXJLZXksXG4gICAgICAgICAgcHJvdmlkZXJOYW1lOiB0aGlzLnByb3ZpZGVyTmFtZSxcbiAgICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5tb2RhbEJ1c3kgPSBmYWxzZTtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxufVxuIl19
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm5/lib/components/index.js b/npm/ng-packs/dist/feature-management/esm5/lib/components/index.js
new file mode 100644
index 0000000000..6b85ebc3c5
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm5/lib/components/index.js
@@ -0,0 +1,6 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+export { FeatureManagementComponent } from './feature-management/feature-management.component';
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWJwL25nLmZlYXR1cmUtbWFuYWdlbWVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSwyQ0FBYyxtREFBbUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZmVhdHVyZS1tYW5hZ2VtZW50L2ZlYXR1cmUtbWFuYWdlbWVudC5jb21wb25lbnQnO1xuIl19
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm5/lib/feature-management.module.js b/npm/ng-packs/dist/feature-management/esm5/lib/feature-management.module.js
new file mode 100644
index 0000000000..f47db748c8
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm5/lib/feature-management.module.js
@@ -0,0 +1,24 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+import { CoreModule } from '@abp/ng.core';
+import { ThemeSharedModule } from '@abp/ng.theme.shared';
+import { NgModule } from '@angular/core';
+import { FeatureManagementComponent } from './components/feature-management/feature-management.component';
+import { NgxsModule } from '@ngxs/store';
+import { FeatureManagementState } from './states/feature-management.state';
+var FeatureManagementModule = /** @class */ (function () {
+ function FeatureManagementModule() {
+ }
+ FeatureManagementModule.decorators = [
+ { type: NgModule, args: [{
+ declarations: [FeatureManagementComponent],
+ imports: [CoreModule, ThemeSharedModule, NgxsModule.forFeature([FeatureManagementState])],
+ exports: [FeatureManagementComponent],
+ },] }
+ ];
+ return FeatureManagementModule;
+}());
+export { FeatureManagementModule };
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhYnAvbmcuZmVhdHVyZS1tYW5hZ2VtZW50LyIsInNvdXJjZXMiOlsibGliL2ZlYXR1cmUtbWFuYWdlbWVudC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTNFO0lBQUE7SUFLc0MsQ0FBQzs7Z0JBTHRDLFFBQVEsU0FBQztvQkFDUixZQUFZLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztvQkFDMUMsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7b0JBQ3pGLE9BQU8sRUFBRSxDQUFDLDBCQUEwQixDQUFDO2lCQUN0Qzs7SUFDcUMsOEJBQUM7Q0FBQSxBQUx2QyxJQUt1QztTQUExQix1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7IFRoZW1lU2hhcmVkTW9kdWxlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZlYXR1cmVNYW5hZ2VtZW50Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2ZlYXR1cmUtbWFuYWdlbWVudC9mZWF0dXJlLW1hbmFnZW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7IE5neHNNb2R1bGUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBGZWF0dXJlTWFuYWdlbWVudFN0YXRlIH0gZnJvbSAnLi9zdGF0ZXMvZmVhdHVyZS1tYW5hZ2VtZW50LnN0YXRlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbRmVhdHVyZU1hbmFnZW1lbnRDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbQ29yZU1vZHVsZSwgVGhlbWVTaGFyZWRNb2R1bGUsIE5neHNNb2R1bGUuZm9yRmVhdHVyZShbRmVhdHVyZU1hbmFnZW1lbnRTdGF0ZV0pXSxcbiAgZXhwb3J0czogW0ZlYXR1cmVNYW5hZ2VtZW50Q29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgRmVhdHVyZU1hbmFnZW1lbnRNb2R1bGUge31cbiJdfQ==
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm5/lib/models/feature-management.js b/npm/ng-packs/dist/feature-management/esm5/lib/models/feature-management.js
new file mode 100644
index 0000000000..0305b2db6b
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm5/lib/models/feature-management.js
@@ -0,0 +1,69 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+export var FeatureManagement;
+(function (FeatureManagement) {
+ /**
+ * @record
+ */
+ function State() { }
+ FeatureManagement.State = State;
+ if (false) {
+ /** @type {?} */
+ State.prototype.features;
+ }
+ /**
+ * @record
+ */
+ function ValueType() { }
+ FeatureManagement.ValueType = ValueType;
+ if (false) {
+ /** @type {?} */
+ ValueType.prototype.name;
+ /** @type {?} */
+ ValueType.prototype.properties;
+ /** @type {?} */
+ ValueType.prototype.validator;
+ }
+ /**
+ * @record
+ */
+ function Feature() { }
+ FeatureManagement.Feature = Feature;
+ if (false) {
+ /** @type {?} */
+ Feature.prototype.name;
+ /** @type {?} */
+ Feature.prototype.value;
+ /** @type {?|undefined} */
+ Feature.prototype.description;
+ /** @type {?|undefined} */
+ Feature.prototype.valueType;
+ /** @type {?|undefined} */
+ Feature.prototype.depth;
+ /** @type {?|undefined} */
+ Feature.prototype.parentName;
+ }
+ /**
+ * @record
+ */
+ function Features() { }
+ FeatureManagement.Features = Features;
+ if (false) {
+ /** @type {?} */
+ Features.prototype.features;
+ }
+ /**
+ * @record
+ */
+ function Provider() { }
+ FeatureManagement.Provider = Provider;
+ if (false) {
+ /** @type {?} */
+ Provider.prototype.providerName;
+ /** @type {?} */
+ Provider.prototype.providerKey;
+ }
+})(FeatureManagement || (FeatureManagement = {}));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFicC9uZy5mZWF0dXJlLW1hbmFnZW1lbnQvIiwic291cmNlcyI6WyJsaWIvbW9kZWxzL2ZlYXR1cmUtbWFuYWdlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsTUFBTSxLQUFXLGlCQUFpQixDQTRCakM7QUE1QkQsV0FBaUIsaUJBQWlCOzs7O0lBQ2hDLG9CQUVDOzs7O1FBREMseUJBQW9COzs7OztJQUd0Qix3QkFJQzs7OztRQUhDLHlCQUFhOztRQUNiLCtCQUFtQjs7UUFDbkIsOEJBQWtCOzs7OztJQUdwQixzQkFPQzs7OztRQU5DLHVCQUFhOztRQUNiLHdCQUFjOztRQUNkLDhCQUFxQjs7UUFDckIsNEJBQXNCOztRQUN0Qix3QkFBZTs7UUFDZiw2QkFBb0I7Ozs7O0lBR3RCLHVCQUVDOzs7O1FBREMsNEJBQW9COzs7OztJQUd0Qix1QkFHQzs7OztRQUZDLGdDQUFxQjs7UUFDckIsK0JBQW9COztBQUV4QixDQUFDLEVBNUJnQixpQkFBaUIsS0FBakIsaUJBQWlCLFFBNEJqQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBuYW1lc3BhY2UgRmVhdHVyZU1hbmFnZW1lbnQge1xuICBleHBvcnQgaW50ZXJmYWNlIFN0YXRlIHtcbiAgICBmZWF0dXJlczogRmVhdHVyZVtdO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBWYWx1ZVR5cGUge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwcm9wZXJ0aWVzOiBvYmplY3Q7XG4gICAgdmFsaWRhdG9yOiBvYmplY3Q7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEZlYXR1cmUge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIHZhbHVlVHlwZT86IFZhbHVlVHlwZTtcbiAgICBkZXB0aD86IG51bWJlcjtcbiAgICBwYXJlbnROYW1lPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlcyB7XG4gICAgZmVhdHVyZXM6IEZlYXR1cmVbXTtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXIge1xuICAgIHByb3ZpZGVyTmFtZTogc3RyaW5nO1xuICAgIHByb3ZpZGVyS2V5OiBzdHJpbmc7XG4gIH1cbn1cbiJdfQ==
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm5/lib/models/index.js b/npm/ng-packs/dist/feature-management/esm5/lib/models/index.js
new file mode 100644
index 0000000000..051244297f
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm5/lib/models/index.js
@@ -0,0 +1,6 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+export {} from './feature-management';
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWJwL25nLmZlYXR1cmUtbWFuYWdlbWVudC8iLCJzb3VyY2VzIjpbImxpYi9tb2RlbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGVBQWMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2ZlYXR1cmUtbWFuYWdlbWVudCc7XG4iXX0=
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm5/lib/services/feature-management.service.js b/npm/ng-packs/dist/feature-management/esm5/lib/services/feature-management.service.js
new file mode 100644
index 0000000000..2246bae0ef
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm5/lib/services/feature-management.service.js
@@ -0,0 +1,78 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+import { Injectable } from '@angular/core';
+import { RestService } from '@abp/ng.core';
+import { Store } from '@ngxs/store';
+import * as i0 from "@angular/core";
+import * as i1 from "@abp/ng.core";
+import * as i2 from "@ngxs/store";
+var FeatureManagementService = /** @class */ (function () {
+ function FeatureManagementService(rest, store) {
+ this.rest = rest;
+ this.store = store;
+ }
+ /**
+ * @param {?} params
+ * @return {?}
+ */
+ FeatureManagementService.prototype.getFeatures = /**
+ * @param {?} params
+ * @return {?}
+ */
+ function (params) {
+ /** @type {?} */
+ var request = {
+ method: 'GET',
+ url: '/api/abp/features',
+ params: params,
+ };
+ return this.rest.request(request);
+ };
+ /**
+ * @param {?} __0
+ * @return {?}
+ */
+ FeatureManagementService.prototype.updateFeatures = /**
+ * @param {?} __0
+ * @return {?}
+ */
+ function (_a) {
+ var features = _a.features, providerKey = _a.providerKey, providerName = _a.providerName;
+ /** @type {?} */
+ var request = {
+ method: 'PUT',
+ url: '/api/abp/features',
+ body: { features: features },
+ params: { providerKey: providerKey, providerName: providerName },
+ };
+ return this.rest.request(request);
+ };
+ FeatureManagementService.decorators = [
+ { type: Injectable, args: [{
+ providedIn: 'root',
+ },] }
+ ];
+ /** @nocollapse */
+ FeatureManagementService.ctorParameters = function () { return [
+ { type: RestService },
+ { type: Store }
+ ]; };
+ /** @nocollapse */ FeatureManagementService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function FeatureManagementService_Factory() { return new FeatureManagementService(i0.ɵɵinject(i1.RestService), i0.ɵɵinject(i2.Store)); }, token: FeatureManagementService, providedIn: "root" });
+ return FeatureManagementService;
+}());
+export { FeatureManagementService };
+if (false) {
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementService.prototype.rest;
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementService.prototype.store;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWJwL25nLmZlYXR1cmUtbWFuYWdlbWVudC8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9mZWF0dXJlLW1hbmFnZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFRLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7QUFJcEM7SUFJRSxrQ0FBb0IsSUFBaUIsRUFBVSxLQUFZO1FBQXZDLFNBQUksR0FBSixJQUFJLENBQWE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFPO0lBQUcsQ0FBQzs7Ozs7SUFFL0QsOENBQVc7Ozs7SUFBWCxVQUFZLE1BQWtDOztZQUN0QyxPQUFPLEdBQXVCO1lBQ2xDLE1BQU0sRUFBRSxLQUFLO1lBQ2IsR0FBRyxFQUFFLG1CQUFtQjtZQUN4QixNQUFNLFFBQUE7U0FDUDtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQXlELE9BQU8sQ0FBQyxDQUFDO0lBQzVGLENBQUM7Ozs7O0lBRUQsaURBQWM7Ozs7SUFBZCxVQUFlLEVBSTJDO1lBSHhELHNCQUFRLEVBQ1IsNEJBQVcsRUFDWCw4QkFBWTs7WUFFTixPQUFPLEdBQTZDO1lBQ3hELE1BQU0sRUFBRSxLQUFLO1lBQ2IsR0FBRyxFQUFFLG1CQUFtQjtZQUN4QixJQUFJLEVBQUUsRUFBRSxRQUFRLFVBQUEsRUFBRTtZQUNsQixNQUFNLEVBQUUsRUFBRSxXQUFXLGFBQUEsRUFBRSxZQUFZLGNBQUEsRUFBRTtTQUN0QztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQW1DLE9BQU8sQ0FBQyxDQUFDO0lBQ3RFLENBQUM7O2dCQTNCRixVQUFVLFNBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzs7O2dCQVBRLFdBQVc7Z0JBQ1gsS0FBSzs7O21DQUZkO0NBa0NDLEFBNUJELElBNEJDO1NBekJZLHdCQUF3Qjs7Ozs7O0lBQ3ZCLHdDQUF5Qjs7Ozs7SUFBRSx5Q0FBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXN0U2VydmljZSwgUmVzdCB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZlYXR1cmVNYW5hZ2VtZW50IH0gZnJvbSAnLi4vbW9kZWxzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEZlYXR1cmVNYW5hZ2VtZW50U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzdDogUmVzdFNlcnZpY2UsIHByaXZhdGUgc3RvcmU6IFN0b3JlKSB7fVxuXG4gIGdldEZlYXR1cmVzKHBhcmFtczogRmVhdHVyZU1hbmFnZW1lbnQuUHJvdmlkZXIpOiBPYnNlcnZhYmxlPEZlYXR1cmVNYW5hZ2VtZW50LkZlYXR1cmVzPiB7XG4gICAgY29uc3QgcmVxdWVzdDogUmVzdC5SZXF1ZXN0PG51bGw+ID0ge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHVybDogJy9hcGkvYWJwL2ZlYXR1cmVzJyxcbiAgICAgIHBhcmFtcyxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnJlc3QucmVxdWVzdDxGZWF0dXJlTWFuYWdlbWVudC5Qcm92aWRlciwgRmVhdHVyZU1hbmFnZW1lbnQuRmVhdHVyZXM+KHJlcXVlc3QpO1xuICB9XG5cbiAgdXBkYXRlRmVhdHVyZXMoe1xuICAgIGZlYXR1cmVzLFxuICAgIHByb3ZpZGVyS2V5LFxuICAgIHByb3ZpZGVyTmFtZSxcbiAgfTogRmVhdHVyZU1hbmFnZW1lbnQuUHJvdmlkZXIgJiBGZWF0dXJlTWFuYWdlbWVudC5GZWF0dXJlcyk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIGNvbnN0IHJlcXVlc3Q6IFJlc3QuUmVxdWVzdDxGZWF0dXJlTWFuYWdlbWVudC5GZWF0dXJlcz4gPSB7XG4gICAgICBtZXRob2Q6ICdQVVQnLFxuICAgICAgdXJsOiAnL2FwaS9hYnAvZmVhdHVyZXMnLFxuICAgICAgYm9keTogeyBmZWF0dXJlcyB9LFxuICAgICAgcGFyYW1zOiB7IHByb3ZpZGVyS2V5LCBwcm92aWRlck5hbWUgfSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnJlc3QucmVxdWVzdDxGZWF0dXJlTWFuYWdlbWVudC5GZWF0dXJlcywgbnVsbD4ocmVxdWVzdCk7XG4gIH1cbn1cbiJdfQ==
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm5/lib/states/feature-management.state.js b/npm/ng-packs/dist/feature-management/esm5/lib/states/feature-management.state.js
new file mode 100644
index 0000000000..21d88ef75e
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm5/lib/states/feature-management.state.js
@@ -0,0 +1,99 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+import * as tslib_1 from "tslib";
+import { Action, Selector, State } from '@ngxs/store';
+import { tap } from 'rxjs/operators';
+import { GetFeatures, UpdateFeatures } from '../actions/feature-management.actions';
+import { FeatureManagementService } from '../services/feature-management.service';
+var FeatureManagementState = /** @class */ (function () {
+ function FeatureManagementState(featureManagementService) {
+ this.featureManagementService = featureManagementService;
+ }
+ /**
+ * @param {?} __0
+ * @return {?}
+ */
+ FeatureManagementState.getFeatures = /**
+ * @param {?} __0
+ * @return {?}
+ */
+ function (_a) {
+ var features = _a.features;
+ return features;
+ };
+ /**
+ * @param {?} __0
+ * @param {?} __1
+ * @return {?}
+ */
+ FeatureManagementState.prototype.getFeatures = /**
+ * @param {?} __0
+ * @param {?} __1
+ * @return {?}
+ */
+ function (_a, _b) {
+ var patchState = _a.patchState;
+ var payload = _b.payload;
+ return this.featureManagementService.getFeatures(payload).pipe(tap((/**
+ * @param {?} __0
+ * @return {?}
+ */
+ function (_a) {
+ var features = _a.features;
+ return patchState({
+ features: features,
+ });
+ })));
+ };
+ /**
+ * @param {?} _
+ * @param {?} __1
+ * @return {?}
+ */
+ FeatureManagementState.prototype.updateFeatures = /**
+ * @param {?} _
+ * @param {?} __1
+ * @return {?}
+ */
+ function (_, _a) {
+ var payload = _a.payload;
+ return this.featureManagementService.updateFeatures(payload);
+ };
+ tslib_1.__decorate([
+ Action(GetFeatures),
+ tslib_1.__metadata("design:type", Function),
+ tslib_1.__metadata("design:paramtypes", [Object, GetFeatures]),
+ tslib_1.__metadata("design:returntype", void 0)
+ ], FeatureManagementState.prototype, "getFeatures", null);
+ tslib_1.__decorate([
+ Action(UpdateFeatures),
+ tslib_1.__metadata("design:type", Function),
+ tslib_1.__metadata("design:paramtypes", [Object, UpdateFeatures]),
+ tslib_1.__metadata("design:returntype", void 0)
+ ], FeatureManagementState.prototype, "updateFeatures", null);
+ tslib_1.__decorate([
+ Selector(),
+ tslib_1.__metadata("design:type", Function),
+ tslib_1.__metadata("design:paramtypes", [Object]),
+ tslib_1.__metadata("design:returntype", void 0)
+ ], FeatureManagementState, "getFeatures", null);
+ FeatureManagementState = tslib_1.__decorate([
+ State({
+ name: 'FeatureManagementState',
+ defaults: (/** @type {?} */ ({ features: {} })),
+ }),
+ tslib_1.__metadata("design:paramtypes", [FeatureManagementService])
+ ], FeatureManagementState);
+ return FeatureManagementState;
+}());
+export { FeatureManagementState };
+if (false) {
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementState.prototype.featureManagementService;
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50LnN0YXRlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFicC9uZy5mZWF0dXJlLW1hbmFnZW1lbnQvIiwic291cmNlcyI6WyJsaWIvc3RhdGVzL2ZlYXR1cmUtbWFuYWdlbWVudC5zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBZ0IsTUFBTSxhQUFhLENBQUM7QUFDcEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFcEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7O0lBWWhGLGdDQUFvQix3QkFBa0Q7UUFBbEQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtJQUFHLENBQUM7Ozs7O0lBSm5FLGtDQUFXOzs7O0lBQWxCLFVBQW1CLEVBQXFDO1lBQW5DLHNCQUFRO1FBQzNCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Ozs7OztJQUtELDRDQUFXOzs7OztJQUFYLFVBQVksRUFBcUQsRUFBRSxFQUF3QjtZQUE3RSwwQkFBVTtZQUE2QyxvQkFBTztRQUMxRSxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM1RCxHQUFHOzs7O1FBQUMsVUFBQyxFQUFZO2dCQUFWLHNCQUFRO1lBQ2IsT0FBQSxVQUFVLENBQUM7Z0JBQ1QsUUFBUSxVQUFBO2FBQ1QsQ0FBQztRQUZGLENBRUUsRUFDSCxDQUNGLENBQUM7SUFDSixDQUFDOzs7Ozs7SUFHRCwrQ0FBYzs7Ozs7SUFBZCxVQUFlLENBQUMsRUFBRSxFQUEyQjtZQUF6QixvQkFBTztRQUN6QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQWJEO1FBREMsTUFBTSxDQUFDLFdBQVcsQ0FBQzs7eURBQzRELFdBQVc7OzZEQVExRjtJQUdEO1FBREMsTUFBTSxDQUFDLGNBQWMsQ0FBQzs7eURBQ1EsY0FBYzs7Z0VBRTVDO0lBcEJEO1FBREMsUUFBUSxFQUFFOzs7O21EQUdWO0lBSlUsc0JBQXNCO1FBSmxDLEtBQUssQ0FBMEI7WUFDOUIsSUFBSSxFQUFFLHdCQUF3QjtZQUM5QixRQUFRLEVBQUUsbUJBQUEsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQTJCO1NBQ3RELENBQUM7aURBTzhDLHdCQUF3QjtPQU4zRCxzQkFBc0IsQ0F1QmxDO0lBQUQsNkJBQUM7Q0FBQSxJQUFBO1NBdkJZLHNCQUFzQjs7Ozs7O0lBTXJCLDBEQUEwRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGlvbiwgU2VsZWN0b3IsIFN0YXRlLCBTdGF0ZUNvbnRleHQgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHZXRGZWF0dXJlcywgVXBkYXRlRmVhdHVyZXMgfSBmcm9tICcuLi9hY3Rpb25zL2ZlYXR1cmUtbWFuYWdlbWVudC5hY3Rpb25zJztcbmltcG9ydCB7IEZlYXR1cmVNYW5hZ2VtZW50IH0gZnJvbSAnLi4vbW9kZWxzL2ZlYXR1cmUtbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBGZWF0dXJlTWFuYWdlbWVudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mZWF0dXJlLW1hbmFnZW1lbnQuc2VydmljZSc7XG5cbkBTdGF0ZTxGZWF0dXJlTWFuYWdlbWVudC5TdGF0ZT4oe1xuICBuYW1lOiAnRmVhdHVyZU1hbmFnZW1lbnRTdGF0ZScsXG4gIGRlZmF1bHRzOiB7IGZlYXR1cmVzOiB7fSB9IGFzIEZlYXR1cmVNYW5hZ2VtZW50LlN0YXRlLFxufSlcbmV4cG9ydCBjbGFzcyBGZWF0dXJlTWFuYWdlbWVudFN0YXRlIHtcbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGdldEZlYXR1cmVzKHsgZmVhdHVyZXMgfTogRmVhdHVyZU1hbmFnZW1lbnQuU3RhdGUpIHtcbiAgICByZXR1cm4gZmVhdHVyZXM7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZlYXR1cmVNYW5hZ2VtZW50U2VydmljZTogRmVhdHVyZU1hbmFnZW1lbnRTZXJ2aWNlKSB7fVxuXG4gIEBBY3Rpb24oR2V0RmVhdHVyZXMpXG4gIGdldEZlYXR1cmVzKHsgcGF0Y2hTdGF0ZSB9OiBTdGF0ZUNvbnRleHQ8RmVhdHVyZU1hbmFnZW1lbnQuU3RhdGU+LCB7IHBheWxvYWQgfTogR2V0RmVhdHVyZXMpIHtcbiAgICByZXR1cm4gdGhpcy5mZWF0dXJlTWFuYWdlbWVudFNlcnZpY2UuZ2V0RmVhdHVyZXMocGF5bG9hZCkucGlwZShcbiAgICAgIHRhcCgoeyBmZWF0dXJlcyB9KSA9PlxuICAgICAgICBwYXRjaFN0YXRlKHtcbiAgICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBAQWN0aW9uKFVwZGF0ZUZlYXR1cmVzKVxuICB1cGRhdGVGZWF0dXJlcyhfLCB7IHBheWxvYWQgfTogVXBkYXRlRmVhdHVyZXMpIHtcbiAgICByZXR1cm4gdGhpcy5mZWF0dXJlTWFuYWdlbWVudFNlcnZpY2UudXBkYXRlRmVhdHVyZXMocGF5bG9hZCk7XG4gIH1cbn1cbiJdfQ==
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm5/lib/states/index.js b/npm/ng-packs/dist/feature-management/esm5/lib/states/index.js
new file mode 100644
index 0000000000..9b8a3b3a43
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm5/lib/states/index.js
@@ -0,0 +1,6 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+export { FeatureManagementState } from "./feature-management.state";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWJwL25nLmZlYXR1cmUtbWFuYWdlbWVudC8iLCJzb3VyY2VzIjpbImxpYi9zdGF0ZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHVDQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZmVhdHVyZS1tYW5hZ2VtZW50LnN0YXRlXCI7XG4iXX0=
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/esm5/public-api.js b/npm/ng-packs/dist/feature-management/esm5/public-api.js
new file mode 100644
index 0000000000..2ca23efea6
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/esm5/public-api.js
@@ -0,0 +1,7 @@
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+export { FeatureManagementModule } from './lib/feature-management.module';
+export { FeatureManagementComponent } from './lib/components';
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhYnAvbmcuZmVhdHVyZS1tYW5hZ2VtZW50LyIsInNvdXJjZXMiOlsicHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsd0NBQWMsaUNBQWlDLENBQUM7QUFDaEQsMkNBQWMsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9mZWF0dXJlLW1hbmFnZW1lbnQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMnO1xuIl19
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/fesm2015/abp-ng.feature-management.js b/npm/ng-packs/dist/feature-management/fesm2015/abp-ng.feature-management.js
new file mode 100644
index 0000000000..a761573caf
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/fesm2015/abp-ng.feature-management.js
@@ -0,0 +1,365 @@
+import { RestService, CoreModule } from '@abp/ng.core';
+import { ThemeSharedModule } from '@abp/ng.theme.shared';
+import { Injectable, ɵɵdefineInjectable, ɵɵinject, EventEmitter, Component, Input, Output, NgModule } from '@angular/core';
+import { __decorate, __metadata } from 'tslib';
+import { Store, Action, Selector, State, Select, NgxsModule } from '@ngxs/store';
+import { Observable } from 'rxjs';
+import { tap, pluck } from 'rxjs/operators';
+import { FormControl, FormGroup } from '@angular/forms';
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+class GetFeatures {
+ /**
+ * @param {?} payload
+ */
+ constructor(payload) {
+ this.payload = payload;
+ }
+}
+GetFeatures.type = '[FeatureManagement] Get Features';
+if (false) {
+ /** @type {?} */
+ GetFeatures.type;
+ /** @type {?} */
+ GetFeatures.prototype.payload;
+}
+class UpdateFeatures {
+ /**
+ * @param {?} payload
+ */
+ constructor(payload) {
+ this.payload = payload;
+ }
+}
+UpdateFeatures.type = '[FeatureManagement] Update Features';
+if (false) {
+ /** @type {?} */
+ UpdateFeatures.type;
+ /** @type {?} */
+ UpdateFeatures.prototype.payload;
+}
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+class FeatureManagementService {
+ /**
+ * @param {?} rest
+ * @param {?} store
+ */
+ constructor(rest, store) {
+ this.rest = rest;
+ this.store = store;
+ }
+ /**
+ * @param {?} params
+ * @return {?}
+ */
+ getFeatures(params) {
+ /** @type {?} */
+ const request = {
+ method: 'GET',
+ url: '/api/abp/features',
+ params,
+ };
+ return this.rest.request(request);
+ }
+ /**
+ * @param {?} __0
+ * @return {?}
+ */
+ updateFeatures({ features, providerKey, providerName, }) {
+ /** @type {?} */
+ const request = {
+ method: 'PUT',
+ url: '/api/abp/features',
+ body: { features },
+ params: { providerKey, providerName },
+ };
+ return this.rest.request(request);
+ }
+}
+FeatureManagementService.decorators = [
+ { type: Injectable, args: [{
+ providedIn: 'root',
+ },] }
+];
+/** @nocollapse */
+FeatureManagementService.ctorParameters = () => [
+ { type: RestService },
+ { type: Store }
+];
+/** @nocollapse */ FeatureManagementService.ngInjectableDef = ɵɵdefineInjectable({ factory: function FeatureManagementService_Factory() { return new FeatureManagementService(ɵɵinject(RestService), ɵɵinject(Store)); }, token: FeatureManagementService, providedIn: "root" });
+if (false) {
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementService.prototype.rest;
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementService.prototype.store;
+}
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+let FeatureManagementState = class FeatureManagementState {
+ /**
+ * @param {?} featureManagementService
+ */
+ constructor(featureManagementService) {
+ this.featureManagementService = featureManagementService;
+ }
+ /**
+ * @param {?} __0
+ * @return {?}
+ */
+ static getFeatures({ features }) {
+ return features;
+ }
+ /**
+ * @param {?} __0
+ * @param {?} __1
+ * @return {?}
+ */
+ getFeatures({ patchState }, { payload }) {
+ return this.featureManagementService.getFeatures(payload).pipe(tap((/**
+ * @param {?} __0
+ * @return {?}
+ */
+ ({ features }) => patchState({
+ features,
+ }))));
+ }
+ /**
+ * @param {?} _
+ * @param {?} __1
+ * @return {?}
+ */
+ updateFeatures(_, { payload }) {
+ return this.featureManagementService.updateFeatures(payload);
+ }
+};
+__decorate([
+ Action(GetFeatures),
+ __metadata("design:type", Function),
+ __metadata("design:paramtypes", [Object, GetFeatures]),
+ __metadata("design:returntype", void 0)
+], FeatureManagementState.prototype, "getFeatures", null);
+__decorate([
+ Action(UpdateFeatures),
+ __metadata("design:type", Function),
+ __metadata("design:paramtypes", [Object, UpdateFeatures]),
+ __metadata("design:returntype", void 0)
+], FeatureManagementState.prototype, "updateFeatures", null);
+__decorate([
+ Selector(),
+ __metadata("design:type", Function),
+ __metadata("design:paramtypes", [Object]),
+ __metadata("design:returntype", void 0)
+], FeatureManagementState, "getFeatures", null);
+FeatureManagementState = __decorate([
+ State({
+ name: 'FeatureManagementState',
+ defaults: (/** @type {?} */ ({ features: {} })),
+ }),
+ __metadata("design:paramtypes", [FeatureManagementService])
+], FeatureManagementState);
+if (false) {
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementState.prototype.featureManagementService;
+}
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+class FeatureManagementComponent {
+ /**
+ * @param {?} store
+ */
+ constructor(store) {
+ this.store = store;
+ this.visibleChange = new EventEmitter();
+ this.modalBusy = false;
+ }
+ /**
+ * @return {?}
+ */
+ get visible() {
+ return this._visible;
+ }
+ /**
+ * @param {?} value
+ * @return {?}
+ */
+ set visible(value) {
+ this._visible = value;
+ this.visibleChange.emit(value);
+ if (value)
+ this.openModal();
+ }
+ /**
+ * @return {?}
+ */
+ openModal() {
+ if (!this.providerKey || !this.providerName) {
+ throw new Error('Provider Key and Provider Name are required.');
+ }
+ this.getFeatures();
+ }
+ /**
+ * @return {?}
+ */
+ getFeatures() {
+ this.store
+ .dispatch(new GetFeatures({ providerKey: this.providerKey, providerName: this.providerName }))
+ .pipe(pluck('FeatureManagementState', 'features'))
+ .subscribe((/**
+ * @param {?} features
+ * @return {?}
+ */
+ features => {
+ this.buildForm(features);
+ }));
+ }
+ /**
+ * @param {?} features
+ * @return {?}
+ */
+ buildForm(features) {
+ /** @type {?} */
+ const formGroupObj = {};
+ for (let i = 0; i < features.length; i++) {
+ formGroupObj[i] = new FormControl(features[i].value === 'false' ? null : features[i].value);
+ }
+ this.form = new FormGroup(formGroupObj);
+ }
+ /**
+ * @return {?}
+ */
+ save() {
+ this.modalBusy = true;
+ /** @type {?} */
+ let features = this.store.selectSnapshot(FeatureManagementState.getFeatures);
+ features = features.map((/**
+ * @param {?} feature
+ * @param {?} i
+ * @return {?}
+ */
+ (feature, i) => ({
+ name: feature.name,
+ value: !this.form.value[i] || this.form.value[i] === 'false' ? null : this.form.value[i],
+ })));
+ this.store
+ .dispatch(new UpdateFeatures({
+ providerKey: this.providerKey,
+ providerName: this.providerName,
+ features,
+ }))
+ .subscribe((/**
+ * @return {?}
+ */
+ () => {
+ this.modalBusy = false;
+ this.visible = false;
+ }));
+ }
+}
+FeatureManagementComponent.decorators = [
+ { type: Component, args: [{
+ selector: 'abp-feature-management',
+ template: "\n \n {{ 'AbpTenantManagement::Permission:ManageFeatures' | abpLocalization }}
\n \n\n \n \n \n\n \n \n \n {{ 'AbpFeatureManagement::Save' | abpLocalization }}\n \n \n\n"
+ }] }
+];
+/** @nocollapse */
+FeatureManagementComponent.ctorParameters = () => [
+ { type: Store }
+];
+FeatureManagementComponent.propDecorators = {
+ providerKey: [{ type: Input }],
+ providerName: [{ type: Input }],
+ visible: [{ type: Input }],
+ visibleChange: [{ type: Output }]
+};
+__decorate([
+ Select(FeatureManagementState.getFeatures),
+ __metadata("design:type", Observable)
+], FeatureManagementComponent.prototype, "features$", void 0);
+if (false) {
+ /** @type {?} */
+ FeatureManagementComponent.prototype.providerKey;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.providerName;
+ /**
+ * @type {?}
+ * @protected
+ */
+ FeatureManagementComponent.prototype._visible;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.visibleChange;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.features$;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.modalBusy;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.form;
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementComponent.prototype.store;
+}
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+class FeatureManagementModule {
+}
+FeatureManagementModule.decorators = [
+ { type: NgModule, args: [{
+ declarations: [FeatureManagementComponent],
+ imports: [CoreModule, ThemeSharedModule, NgxsModule.forFeature([FeatureManagementState])],
+ exports: [FeatureManagementComponent],
+ },] }
+];
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+
+export { FeatureManagementComponent, FeatureManagementModule, FeatureManagementComponent as ɵa, FeatureManagementState as ɵb, FeatureManagementState as ɵc, FeatureManagementService as ɵd, GetFeatures as ɵe, UpdateFeatures as ɵf };
+//# sourceMappingURL=abp-ng.feature-management.js.map
diff --git a/npm/ng-packs/dist/feature-management/fesm2015/abp-ng.feature-management.js.map b/npm/ng-packs/dist/feature-management/fesm2015/abp-ng.feature-management.js.map
new file mode 100644
index 0000000000..66b084481e
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/fesm2015/abp-ng.feature-management.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"abp-ng.feature-management.js","sources":["ng://@abp/ng.feature-management/lib/actions/feature-management.actions.ts","ng://@abp/ng.feature-management/lib/services/feature-management.service.ts","ng://@abp/ng.feature-management/lib/states/feature-management.state.ts","ng://@abp/ng.feature-management/lib/components/feature-management/feature-management.component.ts","ng://@abp/ng.feature-management/lib/feature-management.module.ts"],"sourcesContent":["import { FeatureManagement } from '../models';\n\nexport class GetFeatures {\n static readonly type = '[FeatureManagement] Get Features';\n constructor(public payload: FeatureManagement.Provider) {}\n}\n\nexport class UpdateFeatures {\n static readonly type = '[FeatureManagement] Update Features';\n constructor(public payload: FeatureManagement.Provider & FeatureManagement.Features) {}\n}\n","import { Injectable } from '@angular/core';\nimport { RestService, Rest } from '@abp/ng.core';\nimport { Store } from '@ngxs/store';\nimport { Observable } from 'rxjs';\nimport { FeatureManagement } from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FeatureManagementService {\n constructor(private rest: RestService, private store: Store) {}\n\n getFeatures(params: FeatureManagement.Provider): Observable {\n const request: Rest.Request = {\n method: 'GET',\n url: '/api/abp/features',\n params,\n };\n return this.rest.request(request);\n }\n\n updateFeatures({\n features,\n providerKey,\n providerName,\n }: FeatureManagement.Provider & FeatureManagement.Features): Observable {\n const request: Rest.Request = {\n method: 'PUT',\n url: '/api/abp/features',\n body: { features },\n params: { providerKey, providerName },\n };\n return this.rest.request(request);\n }\n}\n","import { Action, Selector, State, StateContext } from '@ngxs/store';\nimport { tap } from 'rxjs/operators';\nimport { GetFeatures, UpdateFeatures } from '../actions/feature-management.actions';\nimport { FeatureManagement } from '../models/feature-management';\nimport { FeatureManagementService } from '../services/feature-management.service';\n\n@State({\n name: 'FeatureManagementState',\n defaults: { features: {} } as FeatureManagement.State,\n})\nexport class FeatureManagementState {\n @Selector()\n static getFeatures({ features }: FeatureManagement.State) {\n return features;\n }\n\n constructor(private featureManagementService: FeatureManagementService) {}\n\n @Action(GetFeatures)\n getFeatures({ patchState }: StateContext, { payload }: GetFeatures) {\n return this.featureManagementService.getFeatures(payload).pipe(\n tap(({ features }) =>\n patchState({\n features,\n }),\n ),\n );\n }\n\n @Action(UpdateFeatures)\n updateFeatures(_, { payload }: UpdateFeatures) {\n return this.featureManagementService.updateFeatures(payload);\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { Observable } from 'rxjs';\nimport { GetFeatures, UpdateFeatures } from '../../actions';\nimport { FeatureManagement } from '../../models/feature-management';\nimport { FeatureManagementState } from '../../states';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { pluck, tap } from 'rxjs/operators';\n\n@Component({\n selector: 'abp-feature-management',\n templateUrl: './feature-management.component.html',\n})\nexport class FeatureManagementComponent {\n @Input()\n providerKey: string;\n\n @Input()\n providerName: string;\n\n protected _visible;\n\n @Input()\n get visible(): boolean {\n return this._visible;\n }\n\n set visible(value: boolean) {\n this._visible = value;\n this.visibleChange.emit(value);\n\n if (value) this.openModal();\n }\n\n @Output()\n visibleChange = new EventEmitter();\n\n @Select(FeatureManagementState.getFeatures)\n features$: Observable;\n\n modalBusy: boolean = false;\n\n form: FormGroup;\n\n constructor(private store: Store) {}\n\n openModal() {\n if (!this.providerKey || !this.providerName) {\n throw new Error('Provider Key and Provider Name are required.');\n }\n\n this.getFeatures();\n }\n\n getFeatures() {\n this.store\n .dispatch(new GetFeatures({ providerKey: this.providerKey, providerName: this.providerName }))\n .pipe(pluck('FeatureManagementState', 'features'))\n .subscribe(features => {\n this.buildForm(features);\n });\n }\n\n buildForm(features) {\n const formGroupObj = {};\n\n for (let i = 0; i < features.length; i++) {\n formGroupObj[i] = new FormControl(features[i].value === 'false' ? null : features[i].value);\n }\n\n this.form = new FormGroup(formGroupObj);\n }\n\n save() {\n this.modalBusy = true;\n\n let features = this.store.selectSnapshot(FeatureManagementState.getFeatures);\n\n features = features.map((feature, i) => ({\n name: feature.name,\n value: !this.form.value[i] || this.form.value[i] === 'false' ? null : this.form.value[i],\n }));\n\n this.store\n .dispatch(\n new UpdateFeatures({\n providerKey: this.providerKey,\n providerName: this.providerName,\n features,\n }),\n )\n .subscribe(() => {\n this.modalBusy = false;\n this.visible = false;\n });\n }\n}\n","import { CoreModule } from '@abp/ng.core';\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\nimport { NgModule } from '@angular/core';\nimport { FeatureManagementComponent } from './components/feature-management/feature-management.component';\nimport { NgxsModule } from '@ngxs/store';\nimport { FeatureManagementState } from './states/feature-management.state';\n\n@NgModule({\n declarations: [FeatureManagementComponent],\n imports: [CoreModule, ThemeSharedModule, NgxsModule.forFeature([FeatureManagementState])],\n exports: [FeatureManagementComponent],\n})\nexport class FeatureManagementModule {}\n"],"names":["tslib_1.__decorate"],"mappings":"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"}
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/fesm5/abp-ng.feature-management.js b/npm/ng-packs/dist/feature-management/fesm5/abp-ng.feature-management.js
new file mode 100644
index 0000000000..92b041d57b
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/fesm5/abp-ng.feature-management.js
@@ -0,0 +1,406 @@
+import { RestService, CoreModule } from '@abp/ng.core';
+import { ThemeSharedModule } from '@abp/ng.theme.shared';
+import { Injectable, ɵɵdefineInjectable, ɵɵinject, EventEmitter, Component, Input, Output, NgModule } from '@angular/core';
+import { __decorate, __metadata } from 'tslib';
+import { Store, Action, Selector, State, Select, NgxsModule } from '@ngxs/store';
+import { Observable } from 'rxjs';
+import { tap, pluck } from 'rxjs/operators';
+import { FormControl, FormGroup } from '@angular/forms';
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+var GetFeatures = /** @class */ (function () {
+ function GetFeatures(payload) {
+ this.payload = payload;
+ }
+ GetFeatures.type = '[FeatureManagement] Get Features';
+ return GetFeatures;
+}());
+if (false) {
+ /** @type {?} */
+ GetFeatures.type;
+ /** @type {?} */
+ GetFeatures.prototype.payload;
+}
+var UpdateFeatures = /** @class */ (function () {
+ function UpdateFeatures(payload) {
+ this.payload = payload;
+ }
+ UpdateFeatures.type = '[FeatureManagement] Update Features';
+ return UpdateFeatures;
+}());
+if (false) {
+ /** @type {?} */
+ UpdateFeatures.type;
+ /** @type {?} */
+ UpdateFeatures.prototype.payload;
+}
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+var FeatureManagementService = /** @class */ (function () {
+ function FeatureManagementService(rest, store) {
+ this.rest = rest;
+ this.store = store;
+ }
+ /**
+ * @param {?} params
+ * @return {?}
+ */
+ FeatureManagementService.prototype.getFeatures = /**
+ * @param {?} params
+ * @return {?}
+ */
+ function (params) {
+ /** @type {?} */
+ var request = {
+ method: 'GET',
+ url: '/api/abp/features',
+ params: params,
+ };
+ return this.rest.request(request);
+ };
+ /**
+ * @param {?} __0
+ * @return {?}
+ */
+ FeatureManagementService.prototype.updateFeatures = /**
+ * @param {?} __0
+ * @return {?}
+ */
+ function (_a) {
+ var features = _a.features, providerKey = _a.providerKey, providerName = _a.providerName;
+ /** @type {?} */
+ var request = {
+ method: 'PUT',
+ url: '/api/abp/features',
+ body: { features: features },
+ params: { providerKey: providerKey, providerName: providerName },
+ };
+ return this.rest.request(request);
+ };
+ FeatureManagementService.decorators = [
+ { type: Injectable, args: [{
+ providedIn: 'root',
+ },] }
+ ];
+ /** @nocollapse */
+ FeatureManagementService.ctorParameters = function () { return [
+ { type: RestService },
+ { type: Store }
+ ]; };
+ /** @nocollapse */ FeatureManagementService.ngInjectableDef = ɵɵdefineInjectable({ factory: function FeatureManagementService_Factory() { return new FeatureManagementService(ɵɵinject(RestService), ɵɵinject(Store)); }, token: FeatureManagementService, providedIn: "root" });
+ return FeatureManagementService;
+}());
+if (false) {
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementService.prototype.rest;
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementService.prototype.store;
+}
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+var FeatureManagementState = /** @class */ (function () {
+ function FeatureManagementState(featureManagementService) {
+ this.featureManagementService = featureManagementService;
+ }
+ /**
+ * @param {?} __0
+ * @return {?}
+ */
+ FeatureManagementState.getFeatures = /**
+ * @param {?} __0
+ * @return {?}
+ */
+ function (_a) {
+ var features = _a.features;
+ return features;
+ };
+ /**
+ * @param {?} __0
+ * @param {?} __1
+ * @return {?}
+ */
+ FeatureManagementState.prototype.getFeatures = /**
+ * @param {?} __0
+ * @param {?} __1
+ * @return {?}
+ */
+ function (_a, _b) {
+ var patchState = _a.patchState;
+ var payload = _b.payload;
+ return this.featureManagementService.getFeatures(payload).pipe(tap((/**
+ * @param {?} __0
+ * @return {?}
+ */
+ function (_a) {
+ var features = _a.features;
+ return patchState({
+ features: features,
+ });
+ })));
+ };
+ /**
+ * @param {?} _
+ * @param {?} __1
+ * @return {?}
+ */
+ FeatureManagementState.prototype.updateFeatures = /**
+ * @param {?} _
+ * @param {?} __1
+ * @return {?}
+ */
+ function (_, _a) {
+ var payload = _a.payload;
+ return this.featureManagementService.updateFeatures(payload);
+ };
+ __decorate([
+ Action(GetFeatures),
+ __metadata("design:type", Function),
+ __metadata("design:paramtypes", [Object, GetFeatures]),
+ __metadata("design:returntype", void 0)
+ ], FeatureManagementState.prototype, "getFeatures", null);
+ __decorate([
+ Action(UpdateFeatures),
+ __metadata("design:type", Function),
+ __metadata("design:paramtypes", [Object, UpdateFeatures]),
+ __metadata("design:returntype", void 0)
+ ], FeatureManagementState.prototype, "updateFeatures", null);
+ __decorate([
+ Selector(),
+ __metadata("design:type", Function),
+ __metadata("design:paramtypes", [Object]),
+ __metadata("design:returntype", void 0)
+ ], FeatureManagementState, "getFeatures", null);
+ FeatureManagementState = __decorate([
+ State({
+ name: 'FeatureManagementState',
+ defaults: (/** @type {?} */ ({ features: {} })),
+ }),
+ __metadata("design:paramtypes", [FeatureManagementService])
+ ], FeatureManagementState);
+ return FeatureManagementState;
+}());
+if (false) {
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementState.prototype.featureManagementService;
+}
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+var FeatureManagementComponent = /** @class */ (function () {
+ function FeatureManagementComponent(store) {
+ this.store = store;
+ this.visibleChange = new EventEmitter();
+ this.modalBusy = false;
+ }
+ Object.defineProperty(FeatureManagementComponent.prototype, "visible", {
+ get: /**
+ * @return {?}
+ */
+ function () {
+ return this._visible;
+ },
+ set: /**
+ * @param {?} value
+ * @return {?}
+ */
+ function (value) {
+ this._visible = value;
+ this.visibleChange.emit(value);
+ if (value)
+ this.openModal();
+ },
+ enumerable: true,
+ configurable: true
+ });
+ /**
+ * @return {?}
+ */
+ FeatureManagementComponent.prototype.openModal = /**
+ * @return {?}
+ */
+ function () {
+ if (!this.providerKey || !this.providerName) {
+ throw new Error('Provider Key and Provider Name are required.');
+ }
+ this.getFeatures();
+ };
+ /**
+ * @return {?}
+ */
+ FeatureManagementComponent.prototype.getFeatures = /**
+ * @return {?}
+ */
+ function () {
+ var _this = this;
+ this.store
+ .dispatch(new GetFeatures({ providerKey: this.providerKey, providerName: this.providerName }))
+ .pipe(pluck('FeatureManagementState', 'features'))
+ .subscribe((/**
+ * @param {?} features
+ * @return {?}
+ */
+ function (features) {
+ _this.buildForm(features);
+ }));
+ };
+ /**
+ * @param {?} features
+ * @return {?}
+ */
+ FeatureManagementComponent.prototype.buildForm = /**
+ * @param {?} features
+ * @return {?}
+ */
+ function (features) {
+ /** @type {?} */
+ var formGroupObj = {};
+ for (var i = 0; i < features.length; i++) {
+ formGroupObj[i] = new FormControl(features[i].value === 'false' ? null : features[i].value);
+ }
+ this.form = new FormGroup(formGroupObj);
+ };
+ /**
+ * @return {?}
+ */
+ FeatureManagementComponent.prototype.save = /**
+ * @return {?}
+ */
+ function () {
+ var _this = this;
+ this.modalBusy = true;
+ /** @type {?} */
+ var features = this.store.selectSnapshot(FeatureManagementState.getFeatures);
+ features = features.map((/**
+ * @param {?} feature
+ * @param {?} i
+ * @return {?}
+ */
+ function (feature, i) { return ({
+ name: feature.name,
+ value: !_this.form.value[i] || _this.form.value[i] === 'false' ? null : _this.form.value[i],
+ }); }));
+ this.store
+ .dispatch(new UpdateFeatures({
+ providerKey: this.providerKey,
+ providerName: this.providerName,
+ features: features,
+ }))
+ .subscribe((/**
+ * @return {?}
+ */
+ function () {
+ _this.modalBusy = false;
+ _this.visible = false;
+ }));
+ };
+ FeatureManagementComponent.decorators = [
+ { type: Component, args: [{
+ selector: 'abp-feature-management',
+ template: "\n \n {{ 'AbpTenantManagement::Permission:ManageFeatures' | abpLocalization }}
\n \n\n \n \n \n\n \n \n \n {{ 'AbpFeatureManagement::Save' | abpLocalization }}\n \n \n\n"
+ }] }
+ ];
+ /** @nocollapse */
+ FeatureManagementComponent.ctorParameters = function () { return [
+ { type: Store }
+ ]; };
+ FeatureManagementComponent.propDecorators = {
+ providerKey: [{ type: Input }],
+ providerName: [{ type: Input }],
+ visible: [{ type: Input }],
+ visibleChange: [{ type: Output }]
+ };
+ __decorate([
+ Select(FeatureManagementState.getFeatures),
+ __metadata("design:type", Observable)
+ ], FeatureManagementComponent.prototype, "features$", void 0);
+ return FeatureManagementComponent;
+}());
+if (false) {
+ /** @type {?} */
+ FeatureManagementComponent.prototype.providerKey;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.providerName;
+ /**
+ * @type {?}
+ * @protected
+ */
+ FeatureManagementComponent.prototype._visible;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.visibleChange;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.features$;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.modalBusy;
+ /** @type {?} */
+ FeatureManagementComponent.prototype.form;
+ /**
+ * @type {?}
+ * @private
+ */
+ FeatureManagementComponent.prototype.store;
+}
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+var FeatureManagementModule = /** @class */ (function () {
+ function FeatureManagementModule() {
+ }
+ FeatureManagementModule.decorators = [
+ { type: NgModule, args: [{
+ declarations: [FeatureManagementComponent],
+ imports: [CoreModule, ThemeSharedModule, NgxsModule.forFeature([FeatureManagementState])],
+ exports: [FeatureManagementComponent],
+ },] }
+ ];
+ return FeatureManagementModule;
+}());
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+
+/**
+ * @fileoverview added by tsickle
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
+ */
+
+export { FeatureManagementComponent, FeatureManagementModule, FeatureManagementComponent as ɵa, FeatureManagementState as ɵb, FeatureManagementState as ɵc, FeatureManagementService as ɵd, GetFeatures as ɵe, UpdateFeatures as ɵf };
+//# sourceMappingURL=abp-ng.feature-management.js.map
diff --git a/npm/ng-packs/dist/feature-management/fesm5/abp-ng.feature-management.js.map b/npm/ng-packs/dist/feature-management/fesm5/abp-ng.feature-management.js.map
new file mode 100644
index 0000000000..94ecafeb19
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/fesm5/abp-ng.feature-management.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"abp-ng.feature-management.js","sources":["ng://@abp/ng.feature-management/lib/actions/feature-management.actions.ts","ng://@abp/ng.feature-management/lib/services/feature-management.service.ts","ng://@abp/ng.feature-management/lib/states/feature-management.state.ts","ng://@abp/ng.feature-management/lib/components/feature-management/feature-management.component.ts","ng://@abp/ng.feature-management/lib/feature-management.module.ts"],"sourcesContent":["import { FeatureManagement } from '../models';\n\nexport class GetFeatures {\n static readonly type = '[FeatureManagement] Get Features';\n constructor(public payload: FeatureManagement.Provider) {}\n}\n\nexport class UpdateFeatures {\n static readonly type = '[FeatureManagement] Update Features';\n constructor(public payload: FeatureManagement.Provider & FeatureManagement.Features) {}\n}\n","import { Injectable } from '@angular/core';\nimport { RestService, Rest } from '@abp/ng.core';\nimport { Store } from '@ngxs/store';\nimport { Observable } from 'rxjs';\nimport { FeatureManagement } from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FeatureManagementService {\n constructor(private rest: RestService, private store: Store) {}\n\n getFeatures(params: FeatureManagement.Provider): Observable {\n const request: Rest.Request = {\n method: 'GET',\n url: '/api/abp/features',\n params,\n };\n return this.rest.request(request);\n }\n\n updateFeatures({\n features,\n providerKey,\n providerName,\n }: FeatureManagement.Provider & FeatureManagement.Features): Observable {\n const request: Rest.Request = {\n method: 'PUT',\n url: '/api/abp/features',\n body: { features },\n params: { providerKey, providerName },\n };\n return this.rest.request(request);\n }\n}\n","import { Action, Selector, State, StateContext } from '@ngxs/store';\nimport { tap } from 'rxjs/operators';\nimport { GetFeatures, UpdateFeatures } from '../actions/feature-management.actions';\nimport { FeatureManagement } from '../models/feature-management';\nimport { FeatureManagementService } from '../services/feature-management.service';\n\n@State({\n name: 'FeatureManagementState',\n defaults: { features: {} } as FeatureManagement.State,\n})\nexport class FeatureManagementState {\n @Selector()\n static getFeatures({ features }: FeatureManagement.State) {\n return features;\n }\n\n constructor(private featureManagementService: FeatureManagementService) {}\n\n @Action(GetFeatures)\n getFeatures({ patchState }: StateContext, { payload }: GetFeatures) {\n return this.featureManagementService.getFeatures(payload).pipe(\n tap(({ features }) =>\n patchState({\n features,\n }),\n ),\n );\n }\n\n @Action(UpdateFeatures)\n updateFeatures(_, { payload }: UpdateFeatures) {\n return this.featureManagementService.updateFeatures(payload);\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { Observable } from 'rxjs';\nimport { GetFeatures, UpdateFeatures } from '../../actions';\nimport { FeatureManagement } from '../../models/feature-management';\nimport { FeatureManagementState } from '../../states';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { pluck, tap } from 'rxjs/operators';\n\n@Component({\n selector: 'abp-feature-management',\n templateUrl: './feature-management.component.html',\n})\nexport class FeatureManagementComponent {\n @Input()\n providerKey: string;\n\n @Input()\n providerName: string;\n\n protected _visible;\n\n @Input()\n get visible(): boolean {\n return this._visible;\n }\n\n set visible(value: boolean) {\n this._visible = value;\n this.visibleChange.emit(value);\n\n if (value) this.openModal();\n }\n\n @Output()\n visibleChange = new EventEmitter();\n\n @Select(FeatureManagementState.getFeatures)\n features$: Observable;\n\n modalBusy: boolean = false;\n\n form: FormGroup;\n\n constructor(private store: Store) {}\n\n openModal() {\n if (!this.providerKey || !this.providerName) {\n throw new Error('Provider Key and Provider Name are required.');\n }\n\n this.getFeatures();\n }\n\n getFeatures() {\n this.store\n .dispatch(new GetFeatures({ providerKey: this.providerKey, providerName: this.providerName }))\n .pipe(pluck('FeatureManagementState', 'features'))\n .subscribe(features => {\n this.buildForm(features);\n });\n }\n\n buildForm(features) {\n const formGroupObj = {};\n\n for (let i = 0; i < features.length; i++) {\n formGroupObj[i] = new FormControl(features[i].value === 'false' ? null : features[i].value);\n }\n\n this.form = new FormGroup(formGroupObj);\n }\n\n save() {\n this.modalBusy = true;\n\n let features = this.store.selectSnapshot(FeatureManagementState.getFeatures);\n\n features = features.map((feature, i) => ({\n name: feature.name,\n value: !this.form.value[i] || this.form.value[i] === 'false' ? null : this.form.value[i],\n }));\n\n this.store\n .dispatch(\n new UpdateFeatures({\n providerKey: this.providerKey,\n providerName: this.providerName,\n features,\n }),\n )\n .subscribe(() => {\n this.modalBusy = false;\n this.visible = false;\n });\n }\n}\n","import { CoreModule } from '@abp/ng.core';\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\nimport { NgModule } from '@angular/core';\nimport { FeatureManagementComponent } from './components/feature-management/feature-management.component';\nimport { NgxsModule } from '@ngxs/store';\nimport { FeatureManagementState } from './states/feature-management.state';\n\n@NgModule({\n declarations: [FeatureManagementComponent],\n imports: [CoreModule, ThemeSharedModule, NgxsModule.forFeature([FeatureManagementState])],\n exports: [FeatureManagementComponent],\n})\nexport class FeatureManagementModule {}\n"],"names":["tslib_1.__decorate"],"mappings":"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"}
\ No newline at end of file
diff --git a/npm/ng-packs/dist/feature-management/lib/actions/feature-management.actions.d.ts b/npm/ng-packs/dist/feature-management/lib/actions/feature-management.actions.d.ts
new file mode 100644
index 0000000000..d2fffb49d0
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/lib/actions/feature-management.actions.d.ts
@@ -0,0 +1,11 @@
+import { FeatureManagement } from '../models';
+export declare class GetFeatures {
+ payload: FeatureManagement.Provider;
+ static readonly type = "[FeatureManagement] Get Features";
+ constructor(payload: FeatureManagement.Provider);
+}
+export declare class UpdateFeatures {
+ payload: FeatureManagement.Provider & FeatureManagement.Features;
+ static readonly type = "[FeatureManagement] Update Features";
+ constructor(payload: FeatureManagement.Provider & FeatureManagement.Features);
+}
diff --git a/npm/ng-packs/dist/feature-management/lib/actions/index.d.ts b/npm/ng-packs/dist/feature-management/lib/actions/index.d.ts
new file mode 100644
index 0000000000..66678fb322
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/lib/actions/index.d.ts
@@ -0,0 +1 @@
+export * from './feature-management.actions';
diff --git a/npm/ng-packs/dist/feature-management/lib/components/feature-management/feature-management.component.d.ts b/npm/ng-packs/dist/feature-management/lib/components/feature-management/feature-management.component.d.ts
new file mode 100644
index 0000000000..833932e220
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/lib/components/feature-management/feature-management.component.d.ts
@@ -0,0 +1,21 @@
+import { EventEmitter } from '@angular/core';
+import { Store } from '@ngxs/store';
+import { Observable } from 'rxjs';
+import { FeatureManagement } from '../../models/feature-management';
+import { FormGroup } from '@angular/forms';
+export declare class FeatureManagementComponent {
+ private store;
+ providerKey: string;
+ providerName: string;
+ protected _visible: any;
+ visible: boolean;
+ visibleChange: EventEmitter;
+ features$: Observable;
+ modalBusy: boolean;
+ form: FormGroup;
+ constructor(store: Store);
+ openModal(): void;
+ getFeatures(): void;
+ buildForm(features: any): void;
+ save(): void;
+}
diff --git a/npm/ng-packs/dist/feature-management/lib/components/index.d.ts b/npm/ng-packs/dist/feature-management/lib/components/index.d.ts
new file mode 100644
index 0000000000..64f8bd0fc5
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/lib/components/index.d.ts
@@ -0,0 +1 @@
+export * from './feature-management/feature-management.component';
diff --git a/npm/ng-packs/dist/feature-management/lib/feature-management.module.d.ts b/npm/ng-packs/dist/feature-management/lib/feature-management.module.d.ts
new file mode 100644
index 0000000000..4ea54a429d
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/lib/feature-management.module.d.ts
@@ -0,0 +1,2 @@
+export declare class FeatureManagementModule {
+}
diff --git a/npm/ng-packs/dist/feature-management/lib/models/feature-management.d.ts b/npm/ng-packs/dist/feature-management/lib/models/feature-management.d.ts
new file mode 100644
index 0000000000..22ad0d4f65
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/lib/models/feature-management.d.ts
@@ -0,0 +1,25 @@
+export declare namespace FeatureManagement {
+ interface State {
+ features: Feature[];
+ }
+ interface ValueType {
+ name: string;
+ properties: object;
+ validator: object;
+ }
+ interface Feature {
+ name: string;
+ value: string;
+ description?: string;
+ valueType?: ValueType;
+ depth?: number;
+ parentName?: string;
+ }
+ interface Features {
+ features: Feature[];
+ }
+ interface Provider {
+ providerName: string;
+ providerKey: string;
+ }
+}
diff --git a/npm/ng-packs/dist/feature-management/lib/models/index.d.ts b/npm/ng-packs/dist/feature-management/lib/models/index.d.ts
new file mode 100644
index 0000000000..d6ed522ae0
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/lib/models/index.d.ts
@@ -0,0 +1 @@
+export * from './feature-management';
diff --git a/npm/ng-packs/dist/feature-management/lib/services/feature-management.service.d.ts b/npm/ng-packs/dist/feature-management/lib/services/feature-management.service.d.ts
new file mode 100644
index 0000000000..844bb49f31
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/lib/services/feature-management.service.d.ts
@@ -0,0 +1,11 @@
+import { RestService } from '@abp/ng.core';
+import { Store } from '@ngxs/store';
+import { Observable } from 'rxjs';
+import { FeatureManagement } from '../models';
+export declare class FeatureManagementService {
+ private rest;
+ private store;
+ constructor(rest: RestService, store: Store);
+ getFeatures(params: FeatureManagement.Provider): Observable;
+ updateFeatures({ features, providerKey, providerName, }: FeatureManagement.Provider & FeatureManagement.Features): Observable;
+}
diff --git a/npm/ng-packs/dist/feature-management/lib/states/feature-management.state.d.ts b/npm/ng-packs/dist/feature-management/lib/states/feature-management.state.d.ts
new file mode 100644
index 0000000000..d7e1966d8f
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/lib/states/feature-management.state.d.ts
@@ -0,0 +1,11 @@
+import { StateContext } from '@ngxs/store';
+import { GetFeatures, UpdateFeatures } from '../actions/feature-management.actions';
+import { FeatureManagement } from '../models/feature-management';
+import { FeatureManagementService } from '../services/feature-management.service';
+export declare class FeatureManagementState {
+ private featureManagementService;
+ static getFeatures({ features }: FeatureManagement.State): FeatureManagement.Feature[];
+ constructor(featureManagementService: FeatureManagementService);
+ getFeatures({ patchState }: StateContext, { payload }: GetFeatures): import("rxjs").Observable;
+ updateFeatures(_: any, { payload }: UpdateFeatures): import("rxjs").Observable;
+}
diff --git a/npm/ng-packs/dist/feature-management/lib/states/index.d.ts b/npm/ng-packs/dist/feature-management/lib/states/index.d.ts
new file mode 100644
index 0000000000..5c32d87889
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/lib/states/index.d.ts
@@ -0,0 +1 @@
+export * from "./feature-management.state";
diff --git a/npm/ng-packs/dist/feature-management/package.json b/npm/ng-packs/dist/feature-management/package.json
new file mode 100644
index 0000000000..6be326f57a
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "@abp/ng.feature-management",
+ "version": "0.0.83",
+ "dependencies": {
+ "@abp/ng.theme.shared": "^0.8.3",
+ "tslib": "^1.9.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "main": "bundles/abp-ng.feature-management.umd.js",
+ "module": "fesm5/abp-ng.feature-management.js",
+ "es2015": "fesm2015/abp-ng.feature-management.js",
+ "esm5": "esm5/abp-ng.feature-management.js",
+ "esm2015": "esm2015/abp-ng.feature-management.js",
+ "fesm5": "fesm5/abp-ng.feature-management.js",
+ "fesm2015": "fesm2015/abp-ng.feature-management.js",
+ "typings": "abp-ng.feature-management.d.ts",
+ "metadata": "abp-ng.feature-management.metadata.json",
+ "sideEffects": false
+}
diff --git a/npm/ng-packs/dist/feature-management/public-api.d.ts b/npm/ng-packs/dist/feature-management/public-api.d.ts
new file mode 100644
index 0000000000..047ac00914
--- /dev/null
+++ b/npm/ng-packs/dist/feature-management/public-api.d.ts
@@ -0,0 +1,2 @@
+export * from './lib/feature-management.module';
+export * from './lib/components';
diff --git a/npm/ng-packs/packages/feature-management/ng-package.json b/npm/ng-packs/packages/feature-management/ng-package.json
index 0305bb9206..36ae3f8b13 100644
--- a/npm/ng-packs/packages/feature-management/ng-package.json
+++ b/npm/ng-packs/packages/feature-management/ng-package.json
@@ -3,5 +3,6 @@
"dest": "../../dist/feature-management",
"lib": {
"entryFile": "src/public-api.ts"
- }
+ },
+ "whitelistedNonPeerDependencies": ["@abp/ng.theme.shared"]
}
diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json
index f41fd28fa1..62039ded47 100644
--- a/npm/ng-packs/packages/feature-management/package.json
+++ b/npm/ng-packs/packages/feature-management/package.json
@@ -1,4 +1,10 @@
{
"name": "@abp/ng.feature-management",
- "version": "0.0.1"
+ "version": "0.0.83",
+ "dependencies": {
+ "@abp/ng.theme.shared": "^0.8.3"
+ },
+ "publishConfig": {
+ "access": "public"
+ }
}
diff --git a/npm/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/packages/tenant-management/package.json
index 0e415b4e80..afdf53548f 100644
--- a/npm/ng-packs/packages/tenant-management/package.json
+++ b/npm/ng-packs/packages/tenant-management/package.json
@@ -3,7 +3,7 @@
"version": "0.8.3",
"dependencies": {
"@abp/ng.theme.shared": "^0.8.3",
- "@abp/ng.feature-management": "^0.8.4"
+ "@abp/ng.feature-management": "^0.8.3"
},
"publishConfig": {
"access": "public"