@vendure/admin-ui 2.0.5 → 2.1.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/core/common/generated-types.d.ts +83 -18
  2. package/core/common/version.d.ts +1 -1
  3. package/core/data/definitions/facet-definitions.d.ts +1 -0
  4. package/core/providers/dashboard-widget/dashboard-widget.service.d.ts +4 -1
  5. package/dashboard/components/dashboard/dashboard.component.d.ts +4 -1
  6. package/esm2022/catalog/components/collection-data-table/collection-data-table.component.mjs +3 -3
  7. package/esm2022/catalog/components/collection-detail/collection-detail.component.mjs +2 -2
  8. package/esm2022/catalog/components/collection-list/collection-list.component.mjs +2 -2
  9. package/esm2022/catalog/components/collection-tree/collection-tree-node.component.mjs +3 -3
  10. package/esm2022/catalog/components/facet-list/facet-list.component.mjs +8 -8
  11. package/esm2022/catalog/components/move-collections-dialog/move-collections-dialog.component.mjs +2 -2
  12. package/esm2022/catalog/components/product-detail/product-detail.component.mjs +3 -3
  13. package/esm2022/catalog/components/product-list/product-list.component.mjs +2 -2
  14. package/esm2022/catalog/components/product-variant-detail/product-variant-detail.component.mjs +4 -4
  15. package/esm2022/catalog/components/product-variant-list/product-variant-list.component.mjs +2 -2
  16. package/esm2022/catalog/components/product-variants-editor/product-variants-editor.component.mjs +7 -5
  17. package/esm2022/core/common/generated-types.mjs +8 -7
  18. package/esm2022/core/common/version.mjs +2 -2
  19. package/esm2022/core/components/app-shell/app-shell.component.mjs +2 -2
  20. package/esm2022/core/components/main-nav/main-nav.component.mjs +2 -2
  21. package/esm2022/core/components/settings-nav/settings-nav.component.mjs +2 -2
  22. package/esm2022/core/components/theme-switcher/theme-switcher.component.mjs +2 -2
  23. package/esm2022/core/components/user-menu/user-menu.component.mjs +2 -2
  24. package/esm2022/core/data/data.module.mjs +1 -1
  25. package/esm2022/core/data/definitions/facet-definitions.mjs +24 -1
  26. package/esm2022/core/data/definitions/promotion-definitions.mjs +2 -1
  27. package/esm2022/core/data/providers/promotion-data.service.mjs +3 -1
  28. package/esm2022/core/providers/dashboard-widget/dashboard-widget.service.mjs +5 -5
  29. package/esm2022/core/shared/components/action-bar/action-bar.component.mjs +2 -2
  30. package/esm2022/core/shared/components/affixed-input/affixed-input.component.mjs +2 -2
  31. package/esm2022/core/shared/components/asset-gallery/asset-gallery.component.mjs +2 -2
  32. package/esm2022/core/shared/components/asset-preview/asset-preview.component.mjs +2 -2
  33. package/esm2022/core/shared/components/card/card.component.mjs +2 -2
  34. package/esm2022/core/shared/components/channel-assignment-control/channel-assignment-control.component.mjs +2 -2
  35. package/esm2022/core/shared/components/channel-badge/channel-badge.component.mjs +2 -2
  36. package/esm2022/core/shared/components/chip/chip.component.mjs +2 -2
  37. package/esm2022/core/shared/components/configurable-input/configurable-input.component.mjs +2 -2
  38. package/esm2022/core/shared/components/customer-label/customer-label.component.mjs +2 -2
  39. package/esm2022/core/shared/components/data-table-2/data-table-search.component.mjs +2 -2
  40. package/esm2022/core/shared/components/data-table-2/data-table2.component.mjs +3 -3
  41. package/esm2022/core/shared/components/data-table-filters/data-table-filters.component.mjs +2 -2
  42. package/esm2022/core/shared/components/datetime-picker/datetime-picker.component.mjs +2 -2
  43. package/esm2022/core/shared/components/dropdown/dropdown-menu.component.mjs +2 -2
  44. package/esm2022/core/shared/components/edit-note-dialog/edit-note-dialog.component.mjs +2 -2
  45. package/esm2022/core/shared/components/facet-value-chip/facet-value-chip.component.mjs +2 -2
  46. package/esm2022/core/shared/components/object-tree/object-tree.component.mjs +3 -3
  47. package/esm2022/core/shared/components/order-state-label/order-state-label.component.mjs +2 -2
  48. package/esm2022/core/shared/components/page-block/page-block.component.mjs +2 -2
  49. package/esm2022/core/shared/components/page-header/page-header.component.mjs +2 -2
  50. package/esm2022/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.mjs +2 -2
  51. package/esm2022/core/shared/components/product-search-input/product-search-input.component.mjs +2 -2
  52. package/esm2022/core/shared/components/product-variant-selector/product-variant-selector.component.mjs +2 -2
  53. package/esm2022/core/shared/components/radio-card/radio-card.component.mjs +2 -2
  54. package/esm2022/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.mjs +2 -2
  55. package/esm2022/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.mjs +2 -2
  56. package/esm2022/core/shared/components/rich-text-editor/rich-text-editor.component.mjs +2 -2
  57. package/esm2022/core/shared/components/select-toggle/select-toggle.component.mjs +2 -2
  58. package/esm2022/core/shared/components/split-view/split-view.component.mjs +2 -2
  59. package/esm2022/core/shared/components/timeline-entry/timeline-entry.component.mjs +2 -2
  60. package/esm2022/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.mjs +2 -2
  61. package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.mjs +2 -2
  62. package/esm2022/customer/components/customer-detail/customer-detail.component.mjs +2 -2
  63. package/esm2022/customer/components/customer-history/customer-history.component.mjs +2 -2
  64. package/esm2022/dashboard/components/dashboard/dashboard.component.mjs +4 -4
  65. package/esm2022/login/components/login/login.component.mjs +2 -2
  66. package/esm2022/marketing/components/promotion-detail/promotion-detail.component.mjs +6 -3
  67. package/esm2022/marketing/components/promotion-list/promotion-list.component.mjs +11 -4
  68. package/esm2022/order/components/cancel-order-dialog/cancel-order-dialog.component.mjs +2 -2
  69. package/esm2022/order/components/fulfill-order-dialog/fulfill-order-dialog.component.mjs +7 -5
  70. package/esm2022/order/components/order-data-table/order-data-table.component.mjs +3 -3
  71. package/esm2022/order/components/order-detail/order-detail.component.mjs +13 -11
  72. package/esm2022/order/components/order-editor/order-editor.component.mjs +2 -2
  73. package/esm2022/order/components/order-history/order-history.component.mjs +2 -2
  74. package/esm2022/order/components/order-payment-card/order-payment-card.component.mjs +2 -2
  75. package/esm2022/order/components/order-process-graph/order-process-node.component.mjs +2 -2
  76. package/esm2022/order/components/order-table/order-table.component.mjs +2 -2
  77. package/esm2022/order/components/refund-order-dialog/refund-order-dialog.component.mjs +2 -2
  78. package/esm2022/order/components/simple-item-list/simple-item-list.component.mjs +2 -2
  79. package/esm2022/settings/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.mjs +2 -2
  80. package/esm2022/settings/components/shipping-method-test-result/shipping-method-test-result.component.mjs +2 -2
  81. package/esm2022/settings/components/zone-list/zone-list.component.mjs +2 -2
  82. package/esm2022/system/components/health-check/health-check.component.mjs +2 -2
  83. package/esm2022/system/components/job-list/job-list.component.mjs +2 -2
  84. package/esm2022/system/components/job-state-label/job-state-label.component.mjs +2 -2
  85. package/fesm2022/vendure-admin-ui-catalog.mjs +32 -31
  86. package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
  87. package/fesm2022/vendure-admin-ui-core.mjs +115 -88
  88. package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
  89. package/fesm2022/vendure-admin-ui-customer.mjs +4 -4
  90. package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
  91. package/fesm2022/vendure-admin-ui-dashboard.mjs +3 -3
  92. package/fesm2022/vendure-admin-ui-dashboard.mjs.map +1 -1
  93. package/fesm2022/vendure-admin-ui-login.mjs +2 -2
  94. package/fesm2022/vendure-admin-ui-login.mjs.map +1 -1
  95. package/fesm2022/vendure-admin-ui-marketing.mjs +15 -5
  96. package/fesm2022/vendure-admin-ui-marketing.mjs.map +1 -1
  97. package/fesm2022/vendure-admin-ui-order.mjs +36 -32
  98. package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
  99. package/fesm2022/vendure-admin-ui-settings.mjs +6 -6
  100. package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
  101. package/fesm2022/vendure-admin-ui-system.mjs +6 -6
  102. package/fesm2022/vendure-admin-ui-system.mjs.map +1 -1
  103. package/marketing/components/promotion-detail/promotion-detail.component.d.ts +1 -0
  104. package/marketing/components/promotion-list/promotion-list.component.d.ts +1 -1
  105. package/package.json +2 -2
  106. package/static/i18n-messages/ar.json +777 -774
  107. package/static/i18n-messages/cs.json +777 -774
  108. package/static/i18n-messages/de.json +777 -774
  109. package/static/i18n-messages/en.json +777 -774
  110. package/static/i18n-messages/es.json +777 -774
  111. package/static/i18n-messages/fr.json +777 -774
  112. package/static/i18n-messages/he.json +777 -774
  113. package/static/i18n-messages/it.json +777 -774
  114. package/static/i18n-messages/pl.json +777 -774
  115. package/static/i18n-messages/pt_BR.json +777 -774
  116. package/static/i18n-messages/pt_PT.json +777 -774
  117. package/static/i18n-messages/ru.json +777 -774
  118. package/static/i18n-messages/uk.json +777 -774
  119. package/static/i18n-messages/zh_Hans.json +777 -774
  120. package/static/i18n-messages/zh_Hant.json +777 -774
  121. package/static/styles/_mixins.scss +3 -3
  122. package/static/styles/global/_forms.scss +2 -2
  123. package/static/styles/global/_global.scss +2 -2
  124. package/static/styles/global/_overrides.scss +1 -1
  125. package/static/styles/global/_utilities.scss +4 -4
  126. package/static/styles/rtl.scss +143 -0
  127. package/static/styles/styles.scss +2 -0
  128. package/static/theme.min.css +1 -1
@@ -784,6 +784,7 @@ export type CreatePromotionInput = {
784
784
  perCustomerUsageLimit?: InputMaybe<Scalars['Int']>;
785
785
  startsAt?: InputMaybe<Scalars['DateTime']>;
786
786
  translations: Array<PromotionTranslationInput>;
787
+ usageLimit?: InputMaybe<Scalars['Int']>;
787
788
  };
788
789
  export type CreatePromotionResult = MissingConditionsError | Promotion;
789
790
  export type CreateProvinceInput = {
@@ -1462,8 +1463,13 @@ export type Facet = Node & {
1462
1463
  name: Scalars['String'];
1463
1464
  translations: Array<FacetTranslation>;
1464
1465
  updatedAt: Scalars['DateTime'];
1466
+ /** Returns a paginated, sortable, filterable list of the Facet's values. Added in v2.1.0. */
1467
+ valueList: FacetValueList;
1465
1468
  values: Array<FacetValue>;
1466
1469
  };
1470
+ export type FacetValueListArgs = {
1471
+ options?: InputMaybe<FacetValueListOptions>;
1472
+ };
1467
1473
  export type FacetFilterParameter = {
1468
1474
  code?: InputMaybe<StringOperators>;
1469
1475
  createdAt?: InputMaybe<DateOperators>;
@@ -1525,6 +1531,7 @@ export type FacetValue = Node & {
1525
1531
  createdAt: Scalars['DateTime'];
1526
1532
  customFields?: Maybe<Scalars['JSON']>;
1527
1533
  facet: Facet;
1534
+ facetId: Scalars['ID'];
1528
1535
  id: Scalars['ID'];
1529
1536
  languageCode: LanguageCode;
1530
1537
  name: Scalars['String'];
@@ -1546,6 +1553,7 @@ export type FacetValueFilterInput = {
1546
1553
  export type FacetValueFilterParameter = {
1547
1554
  code?: InputMaybe<StringOperators>;
1548
1555
  createdAt?: InputMaybe<DateOperators>;
1556
+ facetId?: InputMaybe<IdOperators>;
1549
1557
  id?: InputMaybe<IdOperators>;
1550
1558
  languageCode?: InputMaybe<StringOperators>;
1551
1559
  name?: InputMaybe<StringOperators>;
@@ -1580,6 +1588,7 @@ export type FacetValueResult = {
1580
1588
  export type FacetValueSortParameter = {
1581
1589
  code?: InputMaybe<SortOrder>;
1582
1590
  createdAt?: InputMaybe<SortOrder>;
1591
+ facetId?: InputMaybe<SortOrder>;
1583
1592
  id?: InputMaybe<SortOrder>;
1584
1593
  name?: InputMaybe<SortOrder>;
1585
1594
  updatedAt?: InputMaybe<SortOrder>;
@@ -4158,6 +4167,7 @@ export type Promotion = Node & {
4158
4167
  startsAt?: Maybe<Scalars['DateTime']>;
4159
4168
  translations: Array<PromotionTranslation>;
4160
4169
  updatedAt: Scalars['DateTime'];
4170
+ usageLimit?: Maybe<Scalars['Int']>;
4161
4171
  };
4162
4172
  export type PromotionFilterParameter = {
4163
4173
  couponCode?: InputMaybe<StringOperators>;
@@ -4170,6 +4180,7 @@ export type PromotionFilterParameter = {
4170
4180
  perCustomerUsageLimit?: InputMaybe<NumberOperators>;
4171
4181
  startsAt?: InputMaybe<DateOperators>;
4172
4182
  updatedAt?: InputMaybe<DateOperators>;
4183
+ usageLimit?: InputMaybe<NumberOperators>;
4173
4184
  };
4174
4185
  export type PromotionList = PaginatedList & {
4175
4186
  __typename?: 'PromotionList';
@@ -4198,6 +4209,7 @@ export type PromotionSortParameter = {
4198
4209
  perCustomerUsageLimit?: InputMaybe<SortOrder>;
4199
4210
  startsAt?: InputMaybe<SortOrder>;
4200
4211
  updatedAt?: InputMaybe<SortOrder>;
4212
+ usageLimit?: InputMaybe<SortOrder>;
4201
4213
  };
4202
4214
  export type PromotionTranslation = {
4203
4215
  __typename?: 'PromotionTranslation';
@@ -5485,6 +5497,7 @@ export type UpdatePromotionInput = {
5485
5497
  perCustomerUsageLimit?: InputMaybe<Scalars['Int']>;
5486
5498
  startsAt?: InputMaybe<Scalars['DateTime']>;
5487
5499
  translations?: InputMaybe<Array<PromotionTranslationInput>>;
5500
+ usageLimit?: InputMaybe<Scalars['Int']>;
5488
5501
  };
5489
5502
  export type UpdatePromotionResult = MissingConditionsError | Promotion;
5490
5503
  export type UpdateProvinceInput = {
@@ -5878,28 +5891,32 @@ export type GetFacetListQuery = {
5878
5891
  languageCode: LanguageCode;
5879
5892
  name: string;
5880
5893
  }>;
5881
- values: Array<{
5882
- __typename?: 'FacetValue';
5883
- id: string;
5884
- createdAt: any;
5885
- updatedAt: any;
5886
- languageCode: LanguageCode;
5887
- code: string;
5888
- name: string;
5889
- translations: Array<{
5890
- __typename?: 'FacetValueTranslation';
5891
- id: string;
5892
- languageCode: LanguageCode;
5893
- name: string;
5894
- }>;
5895
- facet: {
5896
- __typename?: 'Facet';
5894
+ valueList: {
5895
+ __typename?: 'FacetValueList';
5896
+ totalItems: number;
5897
+ items: Array<{
5898
+ __typename?: 'FacetValue';
5897
5899
  id: string;
5898
5900
  createdAt: any;
5899
5901
  updatedAt: any;
5902
+ languageCode: LanguageCode;
5903
+ code: string;
5900
5904
  name: string;
5901
- };
5902
- }>;
5905
+ translations: Array<{
5906
+ __typename?: 'FacetValueTranslation';
5907
+ id: string;
5908
+ languageCode: LanguageCode;
5909
+ name: string;
5910
+ }>;
5911
+ facet: {
5912
+ __typename?: 'Facet';
5913
+ id: string;
5914
+ createdAt: any;
5915
+ updatedAt: any;
5916
+ name: string;
5917
+ };
5918
+ }>;
5919
+ };
5903
5920
  }>;
5904
5921
  };
5905
5922
  };
@@ -8423,6 +8440,48 @@ export type FacetWithValuesFragment = {
8423
8440
  };
8424
8441
  }>;
8425
8442
  };
8443
+ export type FacetWithValueListFragment = {
8444
+ __typename?: 'Facet';
8445
+ id: string;
8446
+ createdAt: any;
8447
+ updatedAt: any;
8448
+ languageCode: LanguageCode;
8449
+ isPrivate: boolean;
8450
+ code: string;
8451
+ name: string;
8452
+ translations: Array<{
8453
+ __typename?: 'FacetTranslation';
8454
+ id: string;
8455
+ languageCode: LanguageCode;
8456
+ name: string;
8457
+ }>;
8458
+ valueList: {
8459
+ __typename?: 'FacetValueList';
8460
+ totalItems: number;
8461
+ items: Array<{
8462
+ __typename?: 'FacetValue';
8463
+ id: string;
8464
+ createdAt: any;
8465
+ updatedAt: any;
8466
+ languageCode: LanguageCode;
8467
+ code: string;
8468
+ name: string;
8469
+ translations: Array<{
8470
+ __typename?: 'FacetValueTranslation';
8471
+ id: string;
8472
+ languageCode: LanguageCode;
8473
+ name: string;
8474
+ }>;
8475
+ facet: {
8476
+ __typename?: 'Facet';
8477
+ id: string;
8478
+ createdAt: any;
8479
+ updatedAt: any;
8480
+ name: string;
8481
+ };
8482
+ }>;
8483
+ };
8484
+ };
8426
8485
  export type CreateFacetMutationVariables = Exact<{
8427
8486
  input: CreateFacetInput;
8428
8487
  }>;
@@ -14812,6 +14871,7 @@ export type PromotionFragment = {
14812
14871
  enabled: boolean;
14813
14872
  couponCode?: string | null;
14814
14873
  perCustomerUsageLimit?: number | null;
14874
+ usageLimit?: number | null;
14815
14875
  startsAt?: any | null;
14816
14876
  endsAt?: any | null;
14817
14877
  conditions: Array<{
@@ -14895,6 +14955,7 @@ export type CreatePromotionMutation = {
14895
14955
  enabled: boolean;
14896
14956
  couponCode?: string | null;
14897
14957
  perCustomerUsageLimit?: number | null;
14958
+ usageLimit?: number | null;
14898
14959
  startsAt?: any | null;
14899
14960
  endsAt?: any | null;
14900
14961
  conditions: Array<{
@@ -14940,6 +15001,7 @@ export type UpdatePromotionMutation = {
14940
15001
  enabled: boolean;
14941
15002
  couponCode?: string | null;
14942
15003
  perCustomerUsageLimit?: number | null;
15004
+ usageLimit?: number | null;
14943
15005
  startsAt?: any | null;
14944
15006
  endsAt?: any | null;
14945
15007
  conditions: Array<{
@@ -22519,6 +22581,7 @@ export type GetPromotionDetailQuery = {
22519
22581
  enabled: boolean;
22520
22582
  couponCode?: string | null;
22521
22583
  perCustomerUsageLimit?: number | null;
22584
+ usageLimit?: number | null;
22522
22585
  startsAt?: any | null;
22523
22586
  endsAt?: any | null;
22524
22587
  conditions: Array<{
@@ -22585,6 +22648,7 @@ export type GetPromotionListQuery = {
22585
22648
  enabled: boolean;
22586
22649
  couponCode?: string | null;
22587
22650
  perCustomerUsageLimit?: number | null;
22651
+ usageLimit?: number | null;
22588
22652
  startsAt?: any | null;
22589
22653
  endsAt?: any | null;
22590
22654
  conditions: Array<{
@@ -23645,6 +23709,7 @@ export declare const CustomerFragmentDoc: DocumentNode<CustomerFragment, unknown
23645
23709
  export declare const CustomerGroupFragmentDoc: DocumentNode<CustomerGroupFragment, unknown>;
23646
23710
  export declare const FacetValueFragmentDoc: DocumentNode<FacetValueFragment, unknown>;
23647
23711
  export declare const FacetWithValuesFragmentDoc: DocumentNode<FacetWithValuesFragment, unknown>;
23712
+ export declare const FacetWithValueListFragmentDoc: DocumentNode<FacetWithValueListFragment, unknown>;
23648
23713
  export declare const PaymentFragmentDoc: DocumentNode<PaymentFragment, unknown>;
23649
23714
  export declare const RefundFragmentDoc: DocumentNode<RefundFragment, unknown>;
23650
23715
  export declare const OrderFragmentDoc: DocumentNode<OrderFragment, unknown>;
@@ -1 +1 @@
1
- export declare const ADMIN_UI_VERSION = "2.0.5";
1
+ export declare const ADMIN_UI_VERSION = "2.1.0-next.0";
@@ -1,5 +1,6 @@
1
1
  export declare const FACET_VALUE_FRAGMENT: import("apollo-angular").TypedDocumentNode<unknown, unknown>;
2
2
  export declare const FACET_WITH_VALUES_FRAGMENT: import("apollo-angular").TypedDocumentNode<unknown, unknown>;
3
+ export declare const FACET_WITH_VALUE_LIST_FRAGMENT: import("apollo-angular").TypedDocumentNode<unknown, unknown>;
3
4
  export declare const CREATE_FACET: import("apollo-angular").TypedDocumentNode<unknown, unknown>;
4
5
  export declare const UPDATE_FACET: import("apollo-angular").TypedDocumentNode<unknown, unknown>;
5
6
  export declare const DELETE_FACET: import("apollo-angular").TypedDocumentNode<unknown, unknown>;
@@ -8,7 +8,10 @@ export declare class DashboardWidgetService {
8
8
  private registry;
9
9
  private layoutDef;
10
10
  registerWidget(id: string, config: DashboardWidgetConfig): void;
11
- getAvailableIds(currentUserPermissions: Permission[]): string[];
11
+ getAvailableWidgets(currentUserPermissions: Permission[]): Array<{
12
+ id: string;
13
+ config: DashboardWidgetConfig;
14
+ }>;
12
15
  getWidgetById(id: string): DashboardWidgetConfig | undefined;
13
16
  setDefaultLayout(layout: WidgetLayoutDefinition): void;
14
17
  getDefaultLayout(): WidgetLayoutDefinition;
@@ -9,7 +9,10 @@ export declare class DashboardComponent implements OnInit {
9
9
  private changedDetectorRef;
10
10
  private dataService;
11
11
  widgetLayout: WidgetLayout | undefined;
12
- availableWidgetIds$: Observable<string[]>;
12
+ availableWidgets$: Observable<Array<{
13
+ id: string;
14
+ config: DashboardWidgetConfig;
15
+ }>>;
13
16
  private readonly deletionMarker;
14
17
  private setTitle;
15
18
  constructor(dashboardWidgetService: DashboardWidgetService, localStorageService: LocalStorageService, changedDetectorRef: ChangeDetectorRef, dataService: DataService);
@@ -76,11 +76,11 @@ export class CollectionDataTableComponent extends DataTable2Component {
76
76
  this.changeDetectorRef.markForCheck();
77
77
  }
78
78
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: CollectionDataTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.LocalStorageService }, { token: i1.DataService }, { token: i2.DragDrop }], target: i0.ɵɵFactoryTarget.Component }); }
79
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: CollectionDataTableComponent, selector: "vdr-collection-data-table", inputs: { subCollections: "subCollections" }, outputs: { changeOrder: "changeOrder" }, viewQueries: [{ propertyName: "dropList", first: true, predicate: CdkDropList, descendants: true, static: true }, { propertyName: "collectionRowList", predicate: ["collectionRow"], descendants: true, read: CdkDrag }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"bulk-actions\">\r\n <ng-content select=\"vdr-bulk-action-menu\"></ng-content>\r\n</div>\r\n<div class=\"table-wrapper\">\r\n <table\r\n class=\"\"\r\n [class.no-select]=\"disableSelect\"\r\n [style.table-layout]=\"!items?.length ? 'fixed' : 'inherit'\"\r\n >\r\n <thead [class.items-selected]=\"selectionManager?.selection.length\">\r\n <tr class=\"heading-row\">\r\n <th *ngIf=\"selectionManager\" class=\"selection-col\">\r\n <div class=\"flex\">\r\n <div class=\"drag-handle-spacer\"></div>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.areAllCurrentItemsSelected()\"\r\n (change)=\"onToggleAllClick()\"\r\n />\r\n </div>\r\n </th>\r\n <th\r\n *ngFor=\"let column of visibleSortedColumns; last as isLast\"\r\n [class.expand]=\"column.expand\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <span>{{ column.heading }}</span>\r\n <div *ngIf=\"column.sort as sort\" class=\"sort-toggle\">\r\n <button (click)=\"sort.toggleSortOrder()\" [class.active]=\"sort.sortOrder\">\r\n <clr-icon *ngIf=\"!sort.sortOrder\" shape=\"two-way-arrows left\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'ASC'\" shape=\"arrow up\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'DESC'\" shape=\"arrow down\"></clr-icon>\r\n </button>\r\n <div class=\"sort-label\" *ngIf=\"sort.sortOrder\">{{ sort.sortOrder }}</div>\r\n </div>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"column-picker\">\r\n <vdr-data-table-colum-picker\r\n [uiLanguage]=\"uiLanguage$ | async\"\r\n [columns]=\"sortedColumns\"\r\n (reorder)=\"onColumnReorder($event)\"\r\n (resetColumns)=\"onColumnsReset()\"\r\n ></vdr-data-table-colum-picker>\r\n </div>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"searchComponent || customSearchTemplate || filters?.length\">\r\n <th\r\n [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\"\r\n class=\"filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n >\r\n <button\r\n class=\"button-ghost toggle-search-filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n (click)=\"toggleSearchFilterRow()\"\r\n [title]=\"'common.search-and-filter-list' | translate\"\r\n >\r\n <clr-icon shape=\"search\"></clr-icon>\r\n </button>\r\n <div class=\"filter-row-wrapper\" [class.hidden]=\"!showSearchFilterRow\">\r\n <ng-container *ngTemplateOutlet=\"searchComponent?.template\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"customSearchTemplate\"></ng-container>\r\n <ng-container *ngIf=\"filters\">\r\n <div class=\"filters\">\r\n <vdr-data-table-filters\r\n *ngFor=\"let activeFilter of filters.activeFilters\"\r\n [filterWithValue]=\"activeFilter\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-data-table-filters\r\n *ngIf=\"filters.length\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody\r\n cdkDropList\r\n cdkDropListLockAxis=\"y\"\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n [cdkDropListSortPredicate]=\"sortPredicate\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let item of items\r\n | paginate\r\n : {\r\n itemsPerPage: itemsPerPage,\r\n currentPage: currentPage,\r\n totalItems: totalItems,\r\n id: id,\r\n };\r\n index as i;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"collectionRowTmp\"\r\n [ngTemplateOutletContext]=\"{ item: item, i: i, depth: 0 }\"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-container>\r\n <tr *ngIf=\"!items?.length\">\r\n <td [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\">\r\n <vdr-empty-placeholder [emptyStateLabel]=\"emptyStateLabel\"></vdr-empty-placeholder>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n</div>\r\n<div class=\"table-footer\">\r\n <vdr-items-per-page-controls\r\n *ngIf=\"totalItems\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n ></vdr-items-per-page-controls>\r\n <div *ngIf=\"totalItems\" class=\"p5 total-items-count\">\r\n {{ 'common.total-items' | translate : { currentStart, currentEnd, totalItems } }}\r\n </div>\r\n\r\n <vdr-pagination-controls\r\n *ngIf=\"totalItems\"\r\n [id]=\"id\"\r\n [currentPage]=\"currentPage\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [totalItems]=\"totalItems\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></vdr-pagination-controls>\r\n</div>\r\n\r\n<ng-template #collectionRowTmp let-item=\"item\" let-depth=\"depth\">\r\n <tr #collectionRow cdkDrag [cdkDragData]=\"{ depth: depth, collection: item }\" cdkDragBoundary=\"tbody\">\r\n <td\r\n *ngIf=\"selectionManager\"\r\n [class.active]=\"activeIndex === absoluteIndex[item.id]\"\r\n class=\"selection-col\"\r\n >\r\n <div class=\"flex\">\r\n <div class=\"drag-handle\" cdkDragHandle [title]=\"'catalog.reorder-collection' | translate\">\r\n <clr-icon shape=\"drag-handle\"></clr-icon>\r\n </div>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.isSelected(item)\"\r\n (click)=\"onRowClick(item, $event)\"\r\n />\r\n </div>\r\n </td>\r\n <td\r\n *ngFor=\"let column of visibleSortedColumns\"\r\n [class.active]=\"activeIndex === absoluteIndex[item.id]\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <ng-container\r\n *ngTemplateOutlet=\"column.template; context: { item: item, depth: depth }\"\r\n ></ng-container>\r\n </div>\r\n </td>\r\n <td [class.active]=\"activeIndex === absoluteIndex[item.id]\"><!-- column select --></td>\r\n </tr>\r\n <ng-container *ngFor=\"let subCollection of getSubcollections(item)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"collectionRowTmp; context: { item: subCollection, depth: depth + 1 }\"\r\n ></ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [":host{display:block;max-width:100%;position:relative;margin-bottom:calc(var(--space-unit) * 4);container-type:inline-size}th{border-bottom:1px solid var(--color-weight-200);font-size:var(--font-size-xs);font-weight:600;text-transform:uppercase;position:relative;white-space:nowrap}th,td{padding:calc(var(--space-unit) * 1.5) calc(var(--space-unit) * 1)}tr td:first-of-type,tr th:first-of-type{text-align:center}@media screen and (min-width: 992px){tr td:first-of-type,tr th:first-of-type{padding-left:var(--surface-margin-left);text-align:left}}th:last-of-type,td:last-of-type{border-right:1px solid var(--color-weight-200)}tr:first-of-type th:last-of-type{border-image:linear-gradient(0deg,var(--color-weight-200),transparent) 1}tr:last-of-type td:last-of-type{border-image:linear-gradient(180deg,var(--color-weight-200),transparent) 1}tbody td{border-bottom:1px solid var(--color-table-row-separator)}tbody tr:hover{background-color:var(--color-table-row-hover-bg)}.bulk-actions{margin-left:calc(var(--space-unit) * 5);background-color:var(--color-surface-bg);z-index:10;display:flex;position:absolute;top:5px;height:40px}@media screen and (min-width: 992px){.bulk-actions{margin-left:calc(var(--space-unit) * 8.5)}}@media screen and (min-width: 1280px){.bulk-actions{margin-left:calc(var(--space-unit) * 10.5)}}.table-wrapper{display:block;overflow-y:hidden;overflow-x:auto;width:100%;max-width:var(--surface-width)}table{width:100%}table.no-select{-webkit-user-select:none;user-select:none}.column-picker{width:24px}.sort-toggle{display:flex;align-items:center;margin-left:calc(var(--space-unit) * .5)}.sort-toggle button{border:0;border-radius:var(--border-radius-lg);color:var(--color-weight-500);padding:0 2px;cursor:pointer;background-color:transparent}.sort-toggle button.active{color:var(--color-primary-700)}.sort-toggle .sort-label{margin-left:calc(var(--space-unit) * .5);font-size:10px;color:var(--color-primary-600);font-weight:400}.toggle-search-filter-row{position:absolute;top:-12px;left:4px}@media screen and (min-width: 1280px){.toggle-search-filter-row{left:8px}}.toggle-search-filter-row.active{background-color:var(--color-primary-700);color:var(--color-primary-100);border-color:var(--color-primary-700)}th.filter-row{position:relative;font-size:var(--font-size-base);font-weight:400;background-color:var(--color-weight-100);box-shadow:var(--data-table-filter-box-shadow);border-left-width:0;border-right-width:0;text-align:initial;padding:0}th.filter-row input{width:100%}th.filter-row.active{border-bottom:1px solid var(--color-weight-200)}th.filter-row .filters{margin-top:calc(var(--space-unit) * 1);display:flex;flex-wrap:wrap;gap:calc(var(--space-unit) * .5)}.filter-row-wrapper{padding:calc(var(--space-unit) * 4);padding-left:0;max-height:150px;transition:max-height .2s,padding .2s,opacity .2s}.filter-row-wrapper.hidden{max-height:0px;padding-top:0;padding-bottom:0;overflow:hidden;opacity:0}.cell-link{display:block;width:100%;height:100%}td.active{background-color:var(--color-table-row-active-bg)}.cell-content{display:flex;align-items:center;line-height:var(--font-size-sm);color:var(--color-weight-700)}.cell-content.left{justify-content:flex-start}.cell-content.center{justify-content:center}.cell-content.right{justify-content:flex-end}.selection-col{width:calc(var(--space-unit) * 8)}vdr-empty-placeholder{width:100%}.table-footer{display:flex;align-items:baseline;justify-content:space-between;margin-top:var(--space-unit);margin-left:var(--surface-margin-left);margin-right:var(--space-unit)}.total-items-count{font-size:var(--font-size-xs)}@container (max-width: 500px){.total-items-count{display:none}}\n", ".bulk-actions{margin-left:calc(var(--space-unit) * 6);background-color:var(--color-surface-bg)}@media screen and (min-width: 992px){.bulk-actions{margin-left:calc(var(--space-unit) * 9.5)}}@media screen and (min-width: 1280px){.bulk-actions{margin-left:calc(var(--space-unit) * 11.5)}}.drag-handle{cursor:grab}.drag-handle-spacer{width:16px}.cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{opacity:0}.cdk-drag-placeholder{background-color:var(--color-primary-100)!important}\n"], dependencies: [{ kind: "directive", type: i3.ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { kind: "directive", type: i3.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i1.ItemsPerPageControlsComponent, selector: "vdr-items-per-page-controls", inputs: ["itemsPerPage"], outputs: ["itemsPerPageChange"] }, { kind: "component", type: i1.PaginationControlsComponent, selector: "vdr-pagination-controls", inputs: ["id", "currentPage", "itemsPerPage", "totalItems"], outputs: ["pageChange"] }, { kind: "directive", type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "component", type: i1.EmptyPlaceholderComponent, selector: "vdr-empty-placeholder", inputs: ["emptyStateLabel"] }, { kind: "component", type: i1.DataTableFiltersComponent, selector: "vdr-data-table-filters", inputs: ["filters", "filterWithValue"] }, { kind: "component", type: i1.DataTableColumnPickerComponent, selector: "vdr-data-table-colum-picker", inputs: ["columns", "uiLanguage"], outputs: ["reorder", "resetColumns"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.PaginatePipe, name: "paginate" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
79
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: CollectionDataTableComponent, selector: "vdr-collection-data-table", inputs: { subCollections: "subCollections" }, outputs: { changeOrder: "changeOrder" }, viewQueries: [{ propertyName: "dropList", first: true, predicate: CdkDropList, descendants: true, static: true }, { propertyName: "collectionRowList", predicate: ["collectionRow"], descendants: true, read: CdkDrag }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"bulk-actions\">\r\n <ng-content select=\"vdr-bulk-action-menu\"></ng-content>\r\n</div>\r\n<div class=\"table-wrapper\">\r\n <table\r\n class=\"\"\r\n [class.no-select]=\"disableSelect\"\r\n >\r\n <thead [class.items-selected]=\"selectionManager?.selection.length\">\r\n <tr class=\"heading-row\">\r\n <th *ngIf=\"selectionManager\" class=\"selection-col\">\r\n <div class=\"flex\">\r\n <div class=\"drag-handle-spacer\"></div>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.areAllCurrentItemsSelected()\"\r\n (change)=\"onToggleAllClick()\"\r\n />\r\n </div>\r\n </th>\r\n <th\r\n *ngFor=\"let column of visibleSortedColumns; last as isLast\"\r\n [class.expand]=\"column.expand\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <span>{{ column.heading }}</span>\r\n <div *ngIf=\"column.sort as sort\" class=\"sort-toggle\">\r\n <button (click)=\"sort.toggleSortOrder()\" [class.active]=\"sort.sortOrder\">\r\n <clr-icon *ngIf=\"!sort.sortOrder\" shape=\"two-way-arrows left\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'ASC'\" shape=\"arrow up\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'DESC'\" shape=\"arrow down\"></clr-icon>\r\n </button>\r\n <div class=\"sort-label\" *ngIf=\"sort.sortOrder\">{{ sort.sortOrder }}</div>\r\n </div>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"column-picker\">\r\n <vdr-data-table-colum-picker\r\n [uiLanguage]=\"uiLanguage$ | async\"\r\n [columns]=\"sortedColumns\"\r\n (reorder)=\"onColumnReorder($event)\"\r\n (resetColumns)=\"onColumnsReset()\"\r\n ></vdr-data-table-colum-picker>\r\n </div>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"searchComponent || customSearchTemplate || filters?.length\">\r\n <th\r\n [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\"\r\n class=\"filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n >\r\n <button\r\n class=\"button-ghost toggle-search-filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n (click)=\"toggleSearchFilterRow()\"\r\n [title]=\"'common.search-and-filter-list' | translate\"\r\n >\r\n <clr-icon shape=\"search\"></clr-icon>\r\n </button>\r\n <div class=\"filter-row-wrapper\" [class.hidden]=\"!showSearchFilterRow\">\r\n <ng-container *ngTemplateOutlet=\"searchComponent?.template\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"customSearchTemplate\"></ng-container>\r\n <ng-container *ngIf=\"filters\">\r\n <div class=\"filters\">\r\n <vdr-data-table-filters\r\n *ngFor=\"let activeFilter of filters.activeFilters\"\r\n [filterWithValue]=\"activeFilter\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-data-table-filters\r\n *ngIf=\"filters.length\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody\r\n cdkDropList\r\n cdkDropListLockAxis=\"y\"\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n [cdkDropListSortPredicate]=\"sortPredicate\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let item of items\r\n | paginate\r\n : {\r\n itemsPerPage: itemsPerPage,\r\n currentPage: currentPage,\r\n totalItems: totalItems,\r\n id: id,\r\n };\r\n index as i;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"collectionRowTmp\"\r\n [ngTemplateOutletContext]=\"{ item: item, i: i, depth: 0 }\"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-container>\r\n <tr *ngIf=\"!items?.length\">\r\n <td [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\">\r\n <vdr-empty-placeholder [emptyStateLabel]=\"emptyStateLabel\"></vdr-empty-placeholder>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n</div>\r\n<div class=\"table-footer\">\r\n <vdr-items-per-page-controls\r\n *ngIf=\"totalItems\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n ></vdr-items-per-page-controls>\r\n <div *ngIf=\"totalItems\" class=\"p5 total-items-count\">\r\n {{ 'common.total-items' | translate : { currentStart, currentEnd, totalItems } }}\r\n </div>\r\n\r\n <vdr-pagination-controls\r\n *ngIf=\"totalItems\"\r\n [id]=\"id\"\r\n [currentPage]=\"currentPage\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [totalItems]=\"totalItems\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></vdr-pagination-controls>\r\n</div>\r\n\r\n<ng-template #collectionRowTmp let-item=\"item\" let-depth=\"depth\">\r\n <tr #collectionRow cdkDrag [cdkDragData]=\"{ depth: depth, collection: item }\" cdkDragBoundary=\"tbody\">\r\n <td\r\n *ngIf=\"selectionManager\"\r\n [class.active]=\"activeIndex === absoluteIndex[item.id]\"\r\n class=\"selection-col\"\r\n >\r\n <div class=\"flex\">\r\n <div class=\"drag-handle\" cdkDragHandle [title]=\"'catalog.reorder-collection' | translate\">\r\n <clr-icon shape=\"drag-handle\"></clr-icon>\r\n </div>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.isSelected(item)\"\r\n (click)=\"onRowClick(item, $event)\"\r\n />\r\n </div>\r\n </td>\r\n <td\r\n *ngFor=\"let column of visibleSortedColumns\"\r\n [class.active]=\"activeIndex === absoluteIndex[item.id]\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <ng-container\r\n *ngTemplateOutlet=\"column.template; context: { item: item, depth: depth }\"\r\n ></ng-container>\r\n </div>\r\n </td>\r\n <td [class.active]=\"activeIndex === absoluteIndex[item.id]\"><!-- column select --></td>\r\n </tr>\r\n <ng-container *ngFor=\"let subCollection of getSubcollections(item)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"collectionRowTmp; context: { item: subCollection, depth: depth + 1 }\"\r\n ></ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [":host{display:block;max-width:100%;position:relative;margin-bottom:calc(var(--space-unit) * 4);container-type:inline-size}th{border-bottom:1px solid var(--color-weight-200);font-size:var(--font-size-xs);font-weight:600;text-transform:uppercase;position:relative;white-space:nowrap}th,td{padding:calc(var(--space-unit) * 1.5) calc(var(--space-unit) * 1)}tr td:first-of-type,tr th:first-of-type{text-align:center}@media screen and (min-width: 992px){tr td:first-of-type,tr th:first-of-type{padding-inline-start:var(--surface-margin-left);text-align:start}}th:last-of-type,td:last-of-type{border-inline-end:1px solid var(--color-weight-200)}tr:first-of-type th:last-of-type{border-image:linear-gradient(0deg,var(--color-weight-200),transparent) 1}tr:last-of-type td:last-of-type{border-image:linear-gradient(180deg,var(--color-weight-200),transparent) 1}tbody td{border-bottom:1px solid var(--color-table-row-separator)}tbody tr:hover{background-color:var(--color-table-row-hover-bg)}.bulk-actions{margin-inline-start:calc(var(--space-unit) * 5);background-color:var(--color-surface-bg);z-index:10;display:flex;position:absolute;top:5px;height:40px}@media screen and (min-width: 992px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 8.5)}}@media screen and (min-width: 1280px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 10.5)}}.table-wrapper{display:block;overflow-y:hidden;overflow-x:auto;width:100%;max-width:var(--surface-width)}table{width:100%}table.no-select{-webkit-user-select:none;user-select:none}.column-picker{width:24px}.sort-toggle{display:flex;align-items:center;margin-inline-start:calc(var(--space-unit) * .5)}.sort-toggle button{border:0;border-radius:var(--border-radius-lg);color:var(--color-weight-500);padding:0 2px;cursor:pointer;background-color:transparent}.sort-toggle button.active{color:var(--color-primary-700)}.sort-toggle .sort-label{margin-inline-start:calc(var(--space-unit) * .5);font-size:10px;color:var(--color-primary-600);font-weight:400}.toggle-search-filter-row{position:absolute;top:-12px;left:4px}@media screen and (min-width: 1280px){.toggle-search-filter-row{left:8px}}.toggle-search-filter-row.active{background-color:var(--color-primary-700);color:var(--color-primary-100);border-color:var(--color-primary-700)}th.filter-row{position:relative;font-size:var(--font-size-base);font-weight:400;background-color:var(--color-weight-100);box-shadow:var(--data-table-filter-box-shadow);border-left-width:0;border-right-width:0;text-align:initial;padding:0}th.filter-row input{width:100%}th.filter-row.active{border-bottom:1px solid var(--color-weight-200)}th.filter-row .filters{margin-top:calc(var(--space-unit) * 1);display:flex;flex-wrap:wrap;gap:calc(var(--space-unit) * .5)}.filter-row-wrapper{padding:calc(var(--space-unit) * 4);padding-inline-start:0;max-height:150px;transition:max-height .2s,padding .2s,opacity .2s}.filter-row-wrapper.hidden{max-height:0px;padding-top:0;padding-bottom:0;overflow:hidden;opacity:0}.cell-link{display:block;width:100%;height:100%}td.active{background-color:var(--color-table-row-active-bg)}.cell-content{display:flex;align-items:center;line-height:var(--font-size-sm);color:var(--color-weight-700)}.cell-content.left{justify-content:flex-start}.cell-content.center{justify-content:center}.cell-content.right{justify-content:flex-end}.selection-col{width:calc(var(--space-unit) * 8)}vdr-empty-placeholder{width:100%}.table-footer{display:flex;align-items:baseline;justify-content:space-between;margin-top:var(--space-unit);margin-inline-start:var(--surface-margin-left);margin-inline-end:var(--space-unit)}.total-items-count{font-size:var(--font-size-xs)}@container (max-width: 500px){.total-items-count{display:none}}\n", ".bulk-actions{margin-inline-start:calc(var(--space-unit) * 6);background-color:var(--color-surface-bg)}@media screen and (min-width: 992px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 9.5)}}@media screen and (min-width: 1280px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 11.5)}}.drag-handle{cursor:grab}.drag-handle-spacer{width:16px}.cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{opacity:0}.cdk-drag-placeholder{background-color:var(--color-primary-100)!important}\n"], dependencies: [{ kind: "directive", type: i3.ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { kind: "directive", type: i3.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i1.ItemsPerPageControlsComponent, selector: "vdr-items-per-page-controls", inputs: ["itemsPerPage"], outputs: ["itemsPerPageChange"] }, { kind: "component", type: i1.PaginationControlsComponent, selector: "vdr-pagination-controls", inputs: ["id", "currentPage", "itemsPerPage", "totalItems"], outputs: ["pageChange"] }, { kind: "directive", type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "component", type: i1.EmptyPlaceholderComponent, selector: "vdr-empty-placeholder", inputs: ["emptyStateLabel"] }, { kind: "component", type: i1.DataTableFiltersComponent, selector: "vdr-data-table-filters", inputs: ["filters", "filterWithValue"] }, { kind: "component", type: i1.DataTableColumnPickerComponent, selector: "vdr-data-table-colum-picker", inputs: ["columns", "uiLanguage"], outputs: ["reorder", "resetColumns"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.PaginatePipe, name: "paginate" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
80
80
  }
81
81
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: CollectionDataTableComponent, decorators: [{
82
82
  type: Component,
83
- args: [{ selector: 'vdr-collection-data-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"bulk-actions\">\r\n <ng-content select=\"vdr-bulk-action-menu\"></ng-content>\r\n</div>\r\n<div class=\"table-wrapper\">\r\n <table\r\n class=\"\"\r\n [class.no-select]=\"disableSelect\"\r\n [style.table-layout]=\"!items?.length ? 'fixed' : 'inherit'\"\r\n >\r\n <thead [class.items-selected]=\"selectionManager?.selection.length\">\r\n <tr class=\"heading-row\">\r\n <th *ngIf=\"selectionManager\" class=\"selection-col\">\r\n <div class=\"flex\">\r\n <div class=\"drag-handle-spacer\"></div>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.areAllCurrentItemsSelected()\"\r\n (change)=\"onToggleAllClick()\"\r\n />\r\n </div>\r\n </th>\r\n <th\r\n *ngFor=\"let column of visibleSortedColumns; last as isLast\"\r\n [class.expand]=\"column.expand\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <span>{{ column.heading }}</span>\r\n <div *ngIf=\"column.sort as sort\" class=\"sort-toggle\">\r\n <button (click)=\"sort.toggleSortOrder()\" [class.active]=\"sort.sortOrder\">\r\n <clr-icon *ngIf=\"!sort.sortOrder\" shape=\"two-way-arrows left\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'ASC'\" shape=\"arrow up\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'DESC'\" shape=\"arrow down\"></clr-icon>\r\n </button>\r\n <div class=\"sort-label\" *ngIf=\"sort.sortOrder\">{{ sort.sortOrder }}</div>\r\n </div>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"column-picker\">\r\n <vdr-data-table-colum-picker\r\n [uiLanguage]=\"uiLanguage$ | async\"\r\n [columns]=\"sortedColumns\"\r\n (reorder)=\"onColumnReorder($event)\"\r\n (resetColumns)=\"onColumnsReset()\"\r\n ></vdr-data-table-colum-picker>\r\n </div>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"searchComponent || customSearchTemplate || filters?.length\">\r\n <th\r\n [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\"\r\n class=\"filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n >\r\n <button\r\n class=\"button-ghost toggle-search-filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n (click)=\"toggleSearchFilterRow()\"\r\n [title]=\"'common.search-and-filter-list' | translate\"\r\n >\r\n <clr-icon shape=\"search\"></clr-icon>\r\n </button>\r\n <div class=\"filter-row-wrapper\" [class.hidden]=\"!showSearchFilterRow\">\r\n <ng-container *ngTemplateOutlet=\"searchComponent?.template\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"customSearchTemplate\"></ng-container>\r\n <ng-container *ngIf=\"filters\">\r\n <div class=\"filters\">\r\n <vdr-data-table-filters\r\n *ngFor=\"let activeFilter of filters.activeFilters\"\r\n [filterWithValue]=\"activeFilter\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-data-table-filters\r\n *ngIf=\"filters.length\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody\r\n cdkDropList\r\n cdkDropListLockAxis=\"y\"\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n [cdkDropListSortPredicate]=\"sortPredicate\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let item of items\r\n | paginate\r\n : {\r\n itemsPerPage: itemsPerPage,\r\n currentPage: currentPage,\r\n totalItems: totalItems,\r\n id: id,\r\n };\r\n index as i;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"collectionRowTmp\"\r\n [ngTemplateOutletContext]=\"{ item: item, i: i, depth: 0 }\"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-container>\r\n <tr *ngIf=\"!items?.length\">\r\n <td [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\">\r\n <vdr-empty-placeholder [emptyStateLabel]=\"emptyStateLabel\"></vdr-empty-placeholder>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n</div>\r\n<div class=\"table-footer\">\r\n <vdr-items-per-page-controls\r\n *ngIf=\"totalItems\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n ></vdr-items-per-page-controls>\r\n <div *ngIf=\"totalItems\" class=\"p5 total-items-count\">\r\n {{ 'common.total-items' | translate : { currentStart, currentEnd, totalItems } }}\r\n </div>\r\n\r\n <vdr-pagination-controls\r\n *ngIf=\"totalItems\"\r\n [id]=\"id\"\r\n [currentPage]=\"currentPage\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [totalItems]=\"totalItems\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></vdr-pagination-controls>\r\n</div>\r\n\r\n<ng-template #collectionRowTmp let-item=\"item\" let-depth=\"depth\">\r\n <tr #collectionRow cdkDrag [cdkDragData]=\"{ depth: depth, collection: item }\" cdkDragBoundary=\"tbody\">\r\n <td\r\n *ngIf=\"selectionManager\"\r\n [class.active]=\"activeIndex === absoluteIndex[item.id]\"\r\n class=\"selection-col\"\r\n >\r\n <div class=\"flex\">\r\n <div class=\"drag-handle\" cdkDragHandle [title]=\"'catalog.reorder-collection' | translate\">\r\n <clr-icon shape=\"drag-handle\"></clr-icon>\r\n </div>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.isSelected(item)\"\r\n (click)=\"onRowClick(item, $event)\"\r\n />\r\n </div>\r\n </td>\r\n <td\r\n *ngFor=\"let column of visibleSortedColumns\"\r\n [class.active]=\"activeIndex === absoluteIndex[item.id]\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <ng-container\r\n *ngTemplateOutlet=\"column.template; context: { item: item, depth: depth }\"\r\n ></ng-container>\r\n </div>\r\n </td>\r\n <td [class.active]=\"activeIndex === absoluteIndex[item.id]\"><!-- column select --></td>\r\n </tr>\r\n <ng-container *ngFor=\"let subCollection of getSubcollections(item)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"collectionRowTmp; context: { item: subCollection, depth: depth + 1 }\"\r\n ></ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [":host{display:block;max-width:100%;position:relative;margin-bottom:calc(var(--space-unit) * 4);container-type:inline-size}th{border-bottom:1px solid var(--color-weight-200);font-size:var(--font-size-xs);font-weight:600;text-transform:uppercase;position:relative;white-space:nowrap}th,td{padding:calc(var(--space-unit) * 1.5) calc(var(--space-unit) * 1)}tr td:first-of-type,tr th:first-of-type{text-align:center}@media screen and (min-width: 992px){tr td:first-of-type,tr th:first-of-type{padding-left:var(--surface-margin-left);text-align:left}}th:last-of-type,td:last-of-type{border-right:1px solid var(--color-weight-200)}tr:first-of-type th:last-of-type{border-image:linear-gradient(0deg,var(--color-weight-200),transparent) 1}tr:last-of-type td:last-of-type{border-image:linear-gradient(180deg,var(--color-weight-200),transparent) 1}tbody td{border-bottom:1px solid var(--color-table-row-separator)}tbody tr:hover{background-color:var(--color-table-row-hover-bg)}.bulk-actions{margin-left:calc(var(--space-unit) * 5);background-color:var(--color-surface-bg);z-index:10;display:flex;position:absolute;top:5px;height:40px}@media screen and (min-width: 992px){.bulk-actions{margin-left:calc(var(--space-unit) * 8.5)}}@media screen and (min-width: 1280px){.bulk-actions{margin-left:calc(var(--space-unit) * 10.5)}}.table-wrapper{display:block;overflow-y:hidden;overflow-x:auto;width:100%;max-width:var(--surface-width)}table{width:100%}table.no-select{-webkit-user-select:none;user-select:none}.column-picker{width:24px}.sort-toggle{display:flex;align-items:center;margin-left:calc(var(--space-unit) * .5)}.sort-toggle button{border:0;border-radius:var(--border-radius-lg);color:var(--color-weight-500);padding:0 2px;cursor:pointer;background-color:transparent}.sort-toggle button.active{color:var(--color-primary-700)}.sort-toggle .sort-label{margin-left:calc(var(--space-unit) * .5);font-size:10px;color:var(--color-primary-600);font-weight:400}.toggle-search-filter-row{position:absolute;top:-12px;left:4px}@media screen and (min-width: 1280px){.toggle-search-filter-row{left:8px}}.toggle-search-filter-row.active{background-color:var(--color-primary-700);color:var(--color-primary-100);border-color:var(--color-primary-700)}th.filter-row{position:relative;font-size:var(--font-size-base);font-weight:400;background-color:var(--color-weight-100);box-shadow:var(--data-table-filter-box-shadow);border-left-width:0;border-right-width:0;text-align:initial;padding:0}th.filter-row input{width:100%}th.filter-row.active{border-bottom:1px solid var(--color-weight-200)}th.filter-row .filters{margin-top:calc(var(--space-unit) * 1);display:flex;flex-wrap:wrap;gap:calc(var(--space-unit) * .5)}.filter-row-wrapper{padding:calc(var(--space-unit) * 4);padding-left:0;max-height:150px;transition:max-height .2s,padding .2s,opacity .2s}.filter-row-wrapper.hidden{max-height:0px;padding-top:0;padding-bottom:0;overflow:hidden;opacity:0}.cell-link{display:block;width:100%;height:100%}td.active{background-color:var(--color-table-row-active-bg)}.cell-content{display:flex;align-items:center;line-height:var(--font-size-sm);color:var(--color-weight-700)}.cell-content.left{justify-content:flex-start}.cell-content.center{justify-content:center}.cell-content.right{justify-content:flex-end}.selection-col{width:calc(var(--space-unit) * 8)}vdr-empty-placeholder{width:100%}.table-footer{display:flex;align-items:baseline;justify-content:space-between;margin-top:var(--space-unit);margin-left:var(--surface-margin-left);margin-right:var(--space-unit)}.total-items-count{font-size:var(--font-size-xs)}@container (max-width: 500px){.total-items-count{display:none}}\n", ".bulk-actions{margin-left:calc(var(--space-unit) * 6);background-color:var(--color-surface-bg)}@media screen and (min-width: 992px){.bulk-actions{margin-left:calc(var(--space-unit) * 9.5)}}@media screen and (min-width: 1280px){.bulk-actions{margin-left:calc(var(--space-unit) * 11.5)}}.drag-handle{cursor:grab}.drag-handle-spacer{width:16px}.cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{opacity:0}.cdk-drag-placeholder{background-color:var(--color-primary-100)!important}\n"] }]
83
+ args: [{ selector: 'vdr-collection-data-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"bulk-actions\">\r\n <ng-content select=\"vdr-bulk-action-menu\"></ng-content>\r\n</div>\r\n<div class=\"table-wrapper\">\r\n <table\r\n class=\"\"\r\n [class.no-select]=\"disableSelect\"\r\n >\r\n <thead [class.items-selected]=\"selectionManager?.selection.length\">\r\n <tr class=\"heading-row\">\r\n <th *ngIf=\"selectionManager\" class=\"selection-col\">\r\n <div class=\"flex\">\r\n <div class=\"drag-handle-spacer\"></div>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.areAllCurrentItemsSelected()\"\r\n (change)=\"onToggleAllClick()\"\r\n />\r\n </div>\r\n </th>\r\n <th\r\n *ngFor=\"let column of visibleSortedColumns; last as isLast\"\r\n [class.expand]=\"column.expand\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <span>{{ column.heading }}</span>\r\n <div *ngIf=\"column.sort as sort\" class=\"sort-toggle\">\r\n <button (click)=\"sort.toggleSortOrder()\" [class.active]=\"sort.sortOrder\">\r\n <clr-icon *ngIf=\"!sort.sortOrder\" shape=\"two-way-arrows left\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'ASC'\" shape=\"arrow up\"></clr-icon>\r\n <clr-icon *ngIf=\"sort.sortOrder === 'DESC'\" shape=\"arrow down\"></clr-icon>\r\n </button>\r\n <div class=\"sort-label\" *ngIf=\"sort.sortOrder\">{{ sort.sortOrder }}</div>\r\n </div>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"column-picker\">\r\n <vdr-data-table-colum-picker\r\n [uiLanguage]=\"uiLanguage$ | async\"\r\n [columns]=\"sortedColumns\"\r\n (reorder)=\"onColumnReorder($event)\"\r\n (resetColumns)=\"onColumnsReset()\"\r\n ></vdr-data-table-colum-picker>\r\n </div>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"searchComponent || customSearchTemplate || filters?.length\">\r\n <th\r\n [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\"\r\n class=\"filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n >\r\n <button\r\n class=\"button-ghost toggle-search-filter-row\"\r\n [class.active]=\"showSearchFilterRow\"\r\n (click)=\"toggleSearchFilterRow()\"\r\n [title]=\"'common.search-and-filter-list' | translate\"\r\n >\r\n <clr-icon shape=\"search\"></clr-icon>\r\n </button>\r\n <div class=\"filter-row-wrapper\" [class.hidden]=\"!showSearchFilterRow\">\r\n <ng-container *ngTemplateOutlet=\"searchComponent?.template\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"customSearchTemplate\"></ng-container>\r\n <ng-container *ngIf=\"filters\">\r\n <div class=\"filters\">\r\n <vdr-data-table-filters\r\n *ngFor=\"let activeFilter of filters.activeFilters\"\r\n [filterWithValue]=\"activeFilter\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n <vdr-data-table-filters\r\n *ngIf=\"filters.length\"\r\n [filters]=\"filters\"\r\n class=\"mt-1\"\r\n ></vdr-data-table-filters>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody\r\n cdkDropList\r\n cdkDropListLockAxis=\"y\"\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n [cdkDropListSortPredicate]=\"sortPredicate\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let item of items\r\n | paginate\r\n : {\r\n itemsPerPage: itemsPerPage,\r\n currentPage: currentPage,\r\n totalItems: totalItems,\r\n id: id,\r\n };\r\n index as i;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"collectionRowTmp\"\r\n [ngTemplateOutletContext]=\"{ item: item, i: i, depth: 0 }\"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-container>\r\n <tr *ngIf=\"!items?.length\">\r\n <td [attr.colspan]=\"visibleSortedColumns.length + (selectionManager ? 2 : 1)\">\r\n <vdr-empty-placeholder [emptyStateLabel]=\"emptyStateLabel\"></vdr-empty-placeholder>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n</div>\r\n<div class=\"table-footer\">\r\n <vdr-items-per-page-controls\r\n *ngIf=\"totalItems\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n ></vdr-items-per-page-controls>\r\n <div *ngIf=\"totalItems\" class=\"p5 total-items-count\">\r\n {{ 'common.total-items' | translate : { currentStart, currentEnd, totalItems } }}\r\n </div>\r\n\r\n <vdr-pagination-controls\r\n *ngIf=\"totalItems\"\r\n [id]=\"id\"\r\n [currentPage]=\"currentPage\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [totalItems]=\"totalItems\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></vdr-pagination-controls>\r\n</div>\r\n\r\n<ng-template #collectionRowTmp let-item=\"item\" let-depth=\"depth\">\r\n <tr #collectionRow cdkDrag [cdkDragData]=\"{ depth: depth, collection: item }\" cdkDragBoundary=\"tbody\">\r\n <td\r\n *ngIf=\"selectionManager\"\r\n [class.active]=\"activeIndex === absoluteIndex[item.id]\"\r\n class=\"selection-col\"\r\n >\r\n <div class=\"flex\">\r\n <div class=\"drag-handle\" cdkDragHandle [title]=\"'catalog.reorder-collection' | translate\">\r\n <clr-icon shape=\"drag-handle\"></clr-icon>\r\n </div>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n [checked]=\"selectionManager?.isSelected(item)\"\r\n (click)=\"onRowClick(item, $event)\"\r\n />\r\n </div>\r\n </td>\r\n <td\r\n *ngFor=\"let column of visibleSortedColumns\"\r\n [class.active]=\"activeIndex === absoluteIndex[item.id]\"\r\n >\r\n <div class=\"cell-content\" [ngClass]=\"column.align\">\r\n <ng-container\r\n *ngTemplateOutlet=\"column.template; context: { item: item, depth: depth }\"\r\n ></ng-container>\r\n </div>\r\n </td>\r\n <td [class.active]=\"activeIndex === absoluteIndex[item.id]\"><!-- column select --></td>\r\n </tr>\r\n <ng-container *ngFor=\"let subCollection of getSubcollections(item)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"collectionRowTmp; context: { item: subCollection, depth: depth + 1 }\"\r\n ></ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [":host{display:block;max-width:100%;position:relative;margin-bottom:calc(var(--space-unit) * 4);container-type:inline-size}th{border-bottom:1px solid var(--color-weight-200);font-size:var(--font-size-xs);font-weight:600;text-transform:uppercase;position:relative;white-space:nowrap}th,td{padding:calc(var(--space-unit) * 1.5) calc(var(--space-unit) * 1)}tr td:first-of-type,tr th:first-of-type{text-align:center}@media screen and (min-width: 992px){tr td:first-of-type,tr th:first-of-type{padding-inline-start:var(--surface-margin-left);text-align:start}}th:last-of-type,td:last-of-type{border-inline-end:1px solid var(--color-weight-200)}tr:first-of-type th:last-of-type{border-image:linear-gradient(0deg,var(--color-weight-200),transparent) 1}tr:last-of-type td:last-of-type{border-image:linear-gradient(180deg,var(--color-weight-200),transparent) 1}tbody td{border-bottom:1px solid var(--color-table-row-separator)}tbody tr:hover{background-color:var(--color-table-row-hover-bg)}.bulk-actions{margin-inline-start:calc(var(--space-unit) * 5);background-color:var(--color-surface-bg);z-index:10;display:flex;position:absolute;top:5px;height:40px}@media screen and (min-width: 992px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 8.5)}}@media screen and (min-width: 1280px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 10.5)}}.table-wrapper{display:block;overflow-y:hidden;overflow-x:auto;width:100%;max-width:var(--surface-width)}table{width:100%}table.no-select{-webkit-user-select:none;user-select:none}.column-picker{width:24px}.sort-toggle{display:flex;align-items:center;margin-inline-start:calc(var(--space-unit) * .5)}.sort-toggle button{border:0;border-radius:var(--border-radius-lg);color:var(--color-weight-500);padding:0 2px;cursor:pointer;background-color:transparent}.sort-toggle button.active{color:var(--color-primary-700)}.sort-toggle .sort-label{margin-inline-start:calc(var(--space-unit) * .5);font-size:10px;color:var(--color-primary-600);font-weight:400}.toggle-search-filter-row{position:absolute;top:-12px;left:4px}@media screen and (min-width: 1280px){.toggle-search-filter-row{left:8px}}.toggle-search-filter-row.active{background-color:var(--color-primary-700);color:var(--color-primary-100);border-color:var(--color-primary-700)}th.filter-row{position:relative;font-size:var(--font-size-base);font-weight:400;background-color:var(--color-weight-100);box-shadow:var(--data-table-filter-box-shadow);border-left-width:0;border-right-width:0;text-align:initial;padding:0}th.filter-row input{width:100%}th.filter-row.active{border-bottom:1px solid var(--color-weight-200)}th.filter-row .filters{margin-top:calc(var(--space-unit) * 1);display:flex;flex-wrap:wrap;gap:calc(var(--space-unit) * .5)}.filter-row-wrapper{padding:calc(var(--space-unit) * 4);padding-inline-start:0;max-height:150px;transition:max-height .2s,padding .2s,opacity .2s}.filter-row-wrapper.hidden{max-height:0px;padding-top:0;padding-bottom:0;overflow:hidden;opacity:0}.cell-link{display:block;width:100%;height:100%}td.active{background-color:var(--color-table-row-active-bg)}.cell-content{display:flex;align-items:center;line-height:var(--font-size-sm);color:var(--color-weight-700)}.cell-content.left{justify-content:flex-start}.cell-content.center{justify-content:center}.cell-content.right{justify-content:flex-end}.selection-col{width:calc(var(--space-unit) * 8)}vdr-empty-placeholder{width:100%}.table-footer{display:flex;align-items:baseline;justify-content:space-between;margin-top:var(--space-unit);margin-inline-start:var(--surface-margin-left);margin-inline-end:var(--space-unit)}.total-items-count{font-size:var(--font-size-xs)}@container (max-width: 500px){.total-items-count{display:none}}\n", ".bulk-actions{margin-inline-start:calc(var(--space-unit) * 6);background-color:var(--color-surface-bg)}@media screen and (min-width: 992px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 9.5)}}@media screen and (min-width: 1280px){.bulk-actions{margin-inline-start:calc(var(--space-unit) * 11.5)}}.drag-handle{cursor:grab}.drag-handle-spacer{width:16px}.cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{opacity:0}.cdk-drag-placeholder{background-color:var(--color-primary-100)!important}\n"] }]
84
84
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.LocalStorageService }, { type: i1.DataService }, { type: i2.DragDrop }]; }, propDecorators: { subCollections: [{
85
85
  type: Input
86
86
  }], changeOrder: [{
@@ -92,4 +92,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
92
92
  type: ViewChildren,
93
93
  args: ['collectionRow', { read: CdkDrag }]
94
94
  }] } });
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1kYXRhLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWRhdGEtdGFibGUvY29sbGVjdGlvbi1kYXRhLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWRhdGEtdGFibGUvY29sbGVjdGlvbi1kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQWUsV0FBVyxFQUFxQixNQUFNLHdCQUF3QixDQUFDO0FBQzlGLE9BQU8sRUFFSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxZQUFZLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILG1CQUFtQixHQUl0QixNQUFNLHdCQUF3QixDQUFDOzs7Ozs7OztBQWlCaEMsTUFBTSxPQUFPLDRCQUNULFNBQVEsbUJBQXdDO0lBWWhELFlBQ2MsaUJBQW9DLEVBQ3BDLG1CQUF3QyxFQUN4QyxXQUF3QixFQUMxQixRQUFrQjtRQUUxQixLQUFLLENBQUMsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFMakQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFacEIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQU1qRSxhQUFRLEdBQWMsRUFBRSxDQUFDO1FBQ3pCLGtCQUFhLEdBQTZCLEVBQUUsQ0FBQztRQXNDN0Msa0JBQWEsR0FB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VSxDQUFDLENBQUM7YUFDNUU7U0FDSjtRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQyxDQUFDOzhHQXRGUSw0QkFBNEI7a0dBQTVCLDRCQUE0QixrTUFNMUIsV0FBVyxpSUFJaUIsT0FBTyx5RUNqRGxELHMzUUFpTEE7OzJGRDFJYSw0QkFBNEI7a0JBVHhDLFNBQVM7K0JBQ0ksMkJBQTJCLG1CQU1wQix1QkFBdUIsQ0FBQyxNQUFNOzJMQU10QyxjQUFjO3NCQUF0QixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ21DLFFBQVE7c0JBQWpELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJVSxpQkFBaUI7c0JBQWxFLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBDZGtEcm9wTGlzdCwgRHJhZ0Ryb3AsIERyYWdSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsXHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBRdWVyeUxpc3QsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBEYXRhVGFibGUyQ29tcG9uZW50LFxyXG4gICAgR2V0Q29sbGVjdGlvbkxpc3RRdWVyeSxcclxuICAgIEl0ZW1PZixcclxuICAgIExvY2FsU3RvcmFnZVNlcnZpY2UsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcblxyXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uVGFibGVJdGVtID0gSXRlbU9mPEdldENvbGxlY3Rpb25MaXN0UXVlcnksICdjb2xsZWN0aW9ucyc+O1xyXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uT3JkZXJFdmVudCA9IHtcclxuICAgIGNvbGxlY3Rpb25JZDogc3RyaW5nO1xyXG4gICAgcGFyZW50SWQ6IHN0cmluZztcclxuICAgIGluZGV4OiBudW1iZXI7XHJcbn07XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItY29sbGVjdGlvbi1kYXRhLXRhYmxlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2xsZWN0aW9uLWRhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbXHJcbiAgICAgICAgJy4uLy4uLy4uLy4uL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL2RhdGEtdGFibGUtMi9kYXRhLXRhYmxlMi5jb21wb25lbnQuc2NzcycsXHJcbiAgICAgICAgJy4vY29sbGVjdGlvbi1kYXRhLXRhYmxlLmNvbXBvbmVudC5zY3NzJyxcclxuICAgIF0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25EYXRhVGFibGVDb21wb25lbnRcclxuICAgIGV4dGVuZHMgRGF0YVRhYmxlMkNvbXBvbmVudDxDb2xsZWN0aW9uVGFibGVJdGVtPlxyXG4gICAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXRcclxue1xyXG4gICAgQElucHV0KCkgc3ViQ29sbGVjdGlvbnM6IENvbGxlY3Rpb25UYWJsZUl0ZW1bXTtcclxuICAgIEBPdXRwdXQoKSBjaGFuZ2VPcmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sbGVjdGlvbk9yZGVyRXZlbnQ+KCk7XHJcbiAgICBAVmlld0NoaWxkKENka0Ryb3BMaXN0LCB7IHN0YXRpYzogdHJ1ZSB9KSBkcm9wTGlzdDogQ2RrRHJvcExpc3Q8e1xyXG4gICAgICAgIGRlcHRoOiBudW1iZXI7XHJcbiAgICAgICAgY29sbGVjdGlvbjogQ29sbGVjdGlvblRhYmxlSXRlbTtcclxuICAgIH0+O1xyXG4gICAgQFZpZXdDaGlsZHJlbignY29sbGVjdGlvblJvdycsIHsgcmVhZDogQ2RrRHJhZyB9KSBjb2xsZWN0aW9uUm93TGlzdDogUXVlcnlMaXN0PENka0RyYWc+O1xyXG4gICAgZHJhZ1JlZnM6IERyYWdSZWZbXSA9IFtdO1xyXG4gICAgYWJzb2x1dGVJbmRleDogeyBbaWQ6IHN0cmluZ106IG51bWJlciB9ID0ge307XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByb3RlY3RlZCBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBkcmFnRHJvcDogRHJhZ0Ryb3AsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihjaGFuZ2VEZXRlY3RvclJlZiwgbG9jYWxTdG9yYWdlU2VydmljZSwgZGF0YVNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBpZiAoY2hhbmdlcy5zdWJDb2xsZWN0aW9ucyB8fCBjaGFuZ2VzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsbENvbGxlY3Rpb25zOiBDb2xsZWN0aW9uVGFibGVJdGVtW10gPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIHRoaXMuaXRlbXMgPz8gW10pIHtcclxuICAgICAgICAgICAgICAgIGFsbENvbGxlY3Rpb25zLnB1c2goY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJDb2xsZWN0aW9uTWF0Y2hlcyA9IHRoaXMuZ2V0U3ViY29sbGVjdGlvbnMoY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBhbGxDb2xsZWN0aW9ucy5wdXNoKC4uLnN1YkNvbGxlY3Rpb25NYXRjaGVzLmZsYXQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWxsQ29sbGVjdGlvbnMuZm9yRWFjaCgoY29sbGVjdGlvbiwgaW5kZXgpID0+ICh0aGlzLmFic29sdXRlSW5kZXhbY29sbGVjdGlvbi5pZF0gPSBpbmRleCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uUm93TGlzdC5jaGFuZ2VzLnN1YnNjcmliZSgodmFsOiBRdWVyeUxpc3Q8Q2RrRHJhZz4pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kcm9wTGlzdC5nZXRTb3J0ZWRJdGVtcygpLmZvckVhY2goaXRlbSA9PiB0aGlzLmRyb3BMaXN0LnJlbW92ZUl0ZW0oaXRlbSkpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiB2YWwudG9BcnJheSgpKSB7XHJcbiAgICAgICAgICAgICAgICByZWYuZHJvcENvbnRhaW5lciA9IHRoaXMuZHJvcExpc3Q7XHJcbiAgICAgICAgICAgICAgICByZWYuX2RyYWdSZWYuX3dpdGhEcm9wQ29udGFpbmVyKHRoaXMuZHJvcExpc3QuX2Ryb3BMaXN0UmVmKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJvcExpc3QuYWRkSXRlbShyZWYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3ViY29sbGVjdGlvbnMoaXRlbTogQ29sbGVjdGlvblRhYmxlSXRlbSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN1YkNvbGxlY3Rpb25zPy5maWx0ZXIoYyA9PiBjLnBhcmVudElkID09PSBpdGVtLmlkKSA/PyBbXTtcclxuICAgIH1cclxuXHJcbiAgICBzb3J0UHJlZGljYXRlID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IENka0RyYWc8eyBkZXB0aDogbnVtYmVyOyBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uVGFibGVJdGVtIH0+KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXRlbUF0SW5kZXggPSB0aGlzLmRyb3BMaXN0LmdldFNvcnRlZEl0ZW1zKClbaW5kZXhdO1xyXG4gICAgICAgIHJldHVybiBpdGVtQXRJbmRleD8uZGF0YS5jb2xsZWN0aW9uLnBhcmVudElkID09PSBpdGVtLmRhdGEuY29sbGVjdGlvbi5wYXJlbnRJZDtcclxuICAgIH07XHJcblxyXG4gICAgb25Ecm9wKFxyXG4gICAgICAgIGV2ZW50OiBDZGtEcmFnRHJvcDx7XHJcbiAgICAgICAgICAgIGRlcHRoOiBudW1iZXI7XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IENvbGxlY3Rpb25UYWJsZUl0ZW07XHJcbiAgICAgICAgfT4sXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBpc1RvcExldmVsID0gZXZlbnQuaXRlbS5kYXRhLmNvbGxlY3Rpb24uYnJlYWRjcnVtYnMubGVuZ3RoID09PSAyO1xyXG4gICAgICAgIGNvbnN0IHBhZ2VJbmRleE9mZnNldCA9IGlzVG9wTGV2ZWwgPyAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5pdGVtc1BlclBhZ2UgOiAwO1xyXG4gICAgICAgIGNvbnN0IHBhcmVudElkID0gZXZlbnQuaXRlbS5kYXRhLmNvbGxlY3Rpb24ucGFyZW50SWQ7XHJcbiAgICAgICAgY29uc3QgcGFyZW50SW5kZXggPSB0aGlzLml0ZW1zLmZpbmRJbmRleChpID0+IGkuaWQgPT09IHBhcmVudElkKTtcclxuICAgICAgICBjb25zdCBhZGp1c3RlZEluZGV4ID0gcGFnZUluZGV4T2Zmc2V0ICsgZXZlbnQuY3VycmVudEluZGV4IC0gcGFyZW50SW5kZXggLSAxO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlT3JkZXIuZW1pdCh7XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb25JZDogZXZlbnQuaXRlbS5kYXRhLmNvbGxlY3Rpb24uaWQsXHJcbiAgICAgICAgICAgIGluZGV4OiBhZGp1c3RlZEluZGV4LFxyXG4gICAgICAgICAgICBwYXJlbnRJZDogZXZlbnQuaXRlbS5kYXRhLmNvbGxlY3Rpb24ucGFyZW50SWQsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChpc1RvcExldmVsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMgPSBbLi4udGhpcy5pdGVtc107XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGV2ZW50LnByZXZpb3VzSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnNwbGljZShldmVudC5jdXJyZW50SW5kZXgsIDAsIGV2ZW50Lml0ZW0uZGF0YS5jb2xsZWN0aW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLml0ZW1zLmZpbmQoaSA9PiBpLmlkID09PSBwYXJlbnRJZCk7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN1YkNvbGxlY3Rpb25zID0gdGhpcy5nZXRTdWJjb2xsZWN0aW9ucyhwYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWRQcmV2aW91c0luZGV4ID0gcGFnZUluZGV4T2Zmc2V0ICsgZXZlbnQucHJldmlvdXNJbmRleCAtIHBhcmVudEluZGV4IC0gMTtcclxuICAgICAgICAgICAgICAgIHN1YkNvbGxlY3Rpb25zLnNwbGljZShhZGp1c3RlZFByZXZpb3VzSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgc3ViQ29sbGVjdGlvbnMuc3BsaWNlKGV2ZW50LmN1cnJlbnRJbmRleCwgMCwgZXZlbnQuaXRlbS5kYXRhLmNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImJ1bGstYWN0aW9uc1wiPlxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwidmRyLWJ1bGstYWN0aW9uLW1lbnVcIj48L25nLWNvbnRlbnQ+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlclwiPlxyXG4gICAgPHRhYmxlXHJcbiAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgIFtjbGFzcy5uby1zZWxlY3RdPVwiZGlzYWJsZVNlbGVjdFwiXHJcbiAgICAgICAgW3N0eWxlLnRhYmxlLWxheW91dF09XCIhaXRlbXM/Lmxlbmd0aCA/ICdmaXhlZCcgOiAnaW5oZXJpdCdcIlxyXG4gICAgPlxyXG4gICAgICAgIDx0aGVhZCBbY2xhc3MuaXRlbXMtc2VsZWN0ZWRdPVwic2VsZWN0aW9uTWFuYWdlcj8uc2VsZWN0aW9uLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJoZWFkaW5nLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwic2VsZWN0aW9uTWFuYWdlclwiIGNsYXNzPVwic2VsZWN0aW9uLWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcmFnLWhhbmRsZS1zcGFjZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xyQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbk1hbmFnZXI/LmFyZUFsbEN1cnJlbnRJdGVtc1NlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZUFsbENsaWNrKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdmlzaWJsZVNvcnRlZENvbHVtbnM7IGxhc3QgYXMgaXNMYXN0XCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXhwYW5kXT1cImNvbHVtbi5leHBhbmRcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsLWNvbnRlbnRcIiBbbmdDbGFzc109XCJjb2x1bW4uYWxpZ25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sdW1uLmhlYWRpbmcgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uc29ydCBhcyBzb3J0XCIgY2xhc3M9XCJzb3J0LXRvZ2dsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic29ydC50b2dnbGVTb3J0T3JkZXIoKVwiIFtjbGFzcy5hY3RpdmVdPVwic29ydC5zb3J0T3JkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gKm5nSWY9XCIhc29ydC5zb3J0T3JkZXJcIiBzaGFwZT1cInR3by13YXktYXJyb3dzIGxlZnRcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiAqbmdJZj1cInNvcnQuc29ydE9yZGVyID09PSAnQVNDJ1wiIHNoYXBlPVwiYXJyb3cgdXBcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiAqbmdJZj1cInNvcnQuc29ydE9yZGVyID09PSAnREVTQydcIiBzaGFwZT1cImFycm93IGRvd25cIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydC1sYWJlbFwiICpuZ0lmPVwic29ydC5zb3J0T3JkZXJcIj57eyBzb3J0LnNvcnRPcmRlciB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1waWNrZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kYXRhLXRhYmxlLWNvbHVtLXBpY2tlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VpTGFuZ3VhZ2VdPVwidWlMYW5ndWFnZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJzb3J0ZWRDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW9yZGVyKT1cIm9uQ29sdW1uUmVvcmRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXNldENvbHVtbnMpPVwib25Db2x1bW5zUmVzZXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1kYXRhLXRhYmxlLWNvbHVtLXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDx0ciAqbmdJZj1cInNlYXJjaENvbXBvbmVudCB8fCBjdXN0b21TZWFyY2hUZW1wbGF0ZSB8fCBmaWx0ZXJzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwidmlzaWJsZVNvcnRlZENvbHVtbnMubGVuZ3RoICsgKHNlbGVjdGlvbk1hbmFnZXIgPyAyIDogMSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93U2VhcmNoRmlsdGVyUm93XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLWdob3N0IHRvZ2dsZS1zZWFyY2gtZmlsdGVyLXJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2hvd1NlYXJjaEZpbHRlclJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWFyY2hGaWx0ZXJSb3coKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInY29tbW9uLnNlYXJjaC1hbmQtZmlsdGVyLWxpc3QnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInNlYXJjaFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1yb3ctd3JhcHBlclwiIFtjbGFzcy5oaWRkZW5dPVwiIXNob3dTZWFyY2hGaWx0ZXJSb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlYXJjaENvbXBvbmVudD8udGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVNlYXJjaFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZGF0YS10YWJsZS1maWx0ZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3RpdmVGaWx0ZXIgb2YgZmlsdGVycy5hY3RpdmVGaWx0ZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcldpdGhWYWx1ZV09XCJhY3RpdmVGaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItZGF0YS10YWJsZS1maWx0ZXJzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZGF0YS10YWJsZS1maWx0ZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVycy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItZGF0YS10YWJsZS1maWx0ZXJzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keVxyXG4gICAgICAgICAgICBjZGtEcm9wTGlzdFxyXG4gICAgICAgICAgICBjZGtEcm9wTGlzdExvY2tBeGlzPVwieVwiXHJcbiAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wKCRldmVudClcIlxyXG4gICAgICAgICAgICBbY2RrRHJvcExpc3RTb3J0UHJlZGljYXRlXT1cInNvcnRQcmVkaWNhdGVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiBpdGVtc1xyXG4gICAgICAgICAgICAgICAgICAgIHwgcGFnaW5hdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZTogaXRlbXNQZXJQYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZTogY3VycmVudFBhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXM6IHRvdGFsSXRlbXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaW5kZXggYXMgaTtcclxuICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGblxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sbGVjdGlvblJvd1RtcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbSwgaTogaSwgZGVwdGg6IDAgfVwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiIWl0ZW1zPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJ2aXNpYmxlU29ydGVkQ29sdW1ucy5sZW5ndGggKyAoc2VsZWN0aW9uTWFuYWdlciA/IDIgOiAxKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWVtcHR5LXBsYWNlaG9sZGVyIFtlbXB0eVN0YXRlTGFiZWxdPVwiZW1wdHlTdGF0ZUxhYmVsXCI+PC92ZHItZW1wdHktcGxhY2Vob2xkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICA8L3RhYmxlPlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cInRhYmxlLWZvb3RlclwiPlxyXG4gICAgPHZkci1pdGVtcy1wZXItcGFnZS1jb250cm9sc1xyXG4gICAgICAgICpuZ0lmPVwidG90YWxJdGVtc1wiXHJcbiAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJpdGVtc1BlclBhZ2VcIlxyXG4gICAgICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwiaXRlbXNQZXJQYWdlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICA+PC92ZHItaXRlbXMtcGVyLXBhZ2UtY29udHJvbHM+XHJcbiAgICA8ZGl2ICpuZ0lmPVwidG90YWxJdGVtc1wiIGNsYXNzPVwicDUgdG90YWwtaXRlbXMtY291bnRcIj5cclxuICAgICAgICB7eyAnY29tbW9uLnRvdGFsLWl0ZW1zJyB8IHRyYW5zbGF0ZSA6IHsgY3VycmVudFN0YXJ0LCBjdXJyZW50RW5kLCB0b3RhbEl0ZW1zIH0gfX1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDx2ZHItcGFnaW5hdGlvbi1jb250cm9sc1xyXG4gICAgICAgICpuZ0lmPVwidG90YWxJdGVtc1wiXHJcbiAgICAgICAgW2lkXT1cImlkXCJcclxuICAgICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIlxyXG4gICAgICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCJcclxuICAgICAgICBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zXCJcclxuICAgICAgICAocGFnZUNoYW5nZSk9XCJwYWdlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICA+PC92ZHItcGFnaW5hdGlvbi1jb250cm9scz5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbGxlY3Rpb25Sb3dUbXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWRlcHRoPVwiZGVwdGhcIj5cclxuICAgIDx0ciAjY29sbGVjdGlvblJvdyBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJ7IGRlcHRoOiBkZXB0aCwgY29sbGVjdGlvbjogaXRlbSB9XCIgY2RrRHJhZ0JvdW5kYXJ5PVwidGJvZHlcIj5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3Rpb25NYW5hZ2VyXCJcclxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVJbmRleCA9PT0gYWJzb2x1dGVJbmRleFtpdGVtLmlkXVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0aW9uLWNvbFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctaGFuZGxlXCIgY2RrRHJhZ0hhbmRsZSBbdGl0bGVdPVwiJ2NhdGFsb2cucmVvcmRlci1jb2xsZWN0aW9uJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImRyYWctaGFuZGxlXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICBjbHJDaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbk1hbmFnZXI/LmlzU2VsZWN0ZWQoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKGl0ZW0sICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB2aXNpYmxlU29ydGVkQ29sdW1uc1wiXHJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlSW5kZXggPT09IGFic29sdXRlSW5kZXhbaXRlbS5pZF1cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwtY29udGVudFwiIFtuZ0NsYXNzXT1cImNvbHVtbi5hbGlnblwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uLnRlbXBsYXRlOyBjb250ZXh0OiB7IGl0ZW06IGl0ZW0sIGRlcHRoOiBkZXB0aCB9XCJcclxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVJbmRleCA9PT0gYWJzb2x1dGVJbmRleFtpdGVtLmlkXVwiPjwhLS0gY29sdW1uIHNlbGVjdCAtLT48L3RkPlxyXG4gICAgPC90cj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1YkNvbGxlY3Rpb24gb2YgZ2V0U3ViY29sbGVjdGlvbnMoaXRlbSlcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sbGVjdGlvblJvd1RtcDsgY29udGV4dDogeyBpdGVtOiBzdWJDb2xsZWN0aW9uLCBkZXB0aDogZGVwdGggKyAxIH1cIlxyXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1kYXRhLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWRhdGEtdGFibGUvY29sbGVjdGlvbi1kYXRhLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWRhdGEtdGFibGUvY29sbGVjdGlvbi1kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQWUsV0FBVyxFQUFxQixNQUFNLHdCQUF3QixDQUFDO0FBQzlGLE9BQU8sRUFFSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxZQUFZLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILG1CQUFtQixHQUl0QixNQUFNLHdCQUF3QixDQUFDOzs7Ozs7OztBQWlCaEMsTUFBTSxPQUFPLDRCQUNULFNBQVEsbUJBQXdDO0lBWWhELFlBQ2MsaUJBQW9DLEVBQ3BDLG1CQUF3QyxFQUN4QyxXQUF3QixFQUMxQixRQUFrQjtRQUUxQixLQUFLLENBQUMsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFMakQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFacEIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQU1qRSxhQUFRLEdBQWMsRUFBRSxDQUFDO1FBQ3pCLGtCQUFhLEdBQTZCLEVBQUUsQ0FBQztRQXNDN0Msa0JBQWEsR0FB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VSxDQUFDLENBQUM7YUFDNUU7U0FDSjtRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQyxDQUFDOzhHQXRGUSw0QkFBNEI7a0dBQTVCLDRCQUE0QixrTUFNMUIsV0FBVyxpSUFJaUIsT0FBTyx5RUNqRGxELDZ5UUFnTEE7OzJGRHpJYSw0QkFBNEI7a0JBVHhDLFNBQVM7K0JBQ0ksMkJBQTJCLG1CQU1wQix1QkFBdUIsQ0FBQyxNQUFNOzJMQU10QyxjQUFjO3NCQUF0QixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ21DLFFBQVE7c0JBQWpELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJVSxpQkFBaUI7c0JBQWxFLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBDZGtEcm9wTGlzdCwgRHJhZ0Ryb3AsIERyYWdSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsXHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBRdWVyeUxpc3QsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBEYXRhVGFibGUyQ29tcG9uZW50LFxyXG4gICAgR2V0Q29sbGVjdGlvbkxpc3RRdWVyeSxcclxuICAgIEl0ZW1PZixcclxuICAgIExvY2FsU3RvcmFnZVNlcnZpY2UsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcblxyXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uVGFibGVJdGVtID0gSXRlbU9mPEdldENvbGxlY3Rpb25MaXN0UXVlcnksICdjb2xsZWN0aW9ucyc+O1xyXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uT3JkZXJFdmVudCA9IHtcclxuICAgIGNvbGxlY3Rpb25JZDogc3RyaW5nO1xyXG4gICAgcGFyZW50SWQ6IHN0cmluZztcclxuICAgIGluZGV4OiBudW1iZXI7XHJcbn07XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItY29sbGVjdGlvbi1kYXRhLXRhYmxlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2xsZWN0aW9uLWRhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbXHJcbiAgICAgICAgJy4uLy4uLy4uLy4uL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL2RhdGEtdGFibGUtMi9kYXRhLXRhYmxlMi5jb21wb25lbnQuc2NzcycsXHJcbiAgICAgICAgJy4vY29sbGVjdGlvbi1kYXRhLXRhYmxlLmNvbXBvbmVudC5zY3NzJyxcclxuICAgIF0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25EYXRhVGFibGVDb21wb25lbnRcclxuICAgIGV4dGVuZHMgRGF0YVRhYmxlMkNvbXBvbmVudDxDb2xsZWN0aW9uVGFibGVJdGVtPlxyXG4gICAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXRcclxue1xyXG4gICAgQElucHV0KCkgc3ViQ29sbGVjdGlvbnM6IENvbGxlY3Rpb25UYWJsZUl0ZW1bXTtcclxuICAgIEBPdXRwdXQoKSBjaGFuZ2VPcmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sbGVjdGlvbk9yZGVyRXZlbnQ+KCk7XHJcbiAgICBAVmlld0NoaWxkKENka0Ryb3BMaXN0LCB7IHN0YXRpYzogdHJ1ZSB9KSBkcm9wTGlzdDogQ2RrRHJvcExpc3Q8e1xyXG4gICAgICAgIGRlcHRoOiBudW1iZXI7XHJcbiAgICAgICAgY29sbGVjdGlvbjogQ29sbGVjdGlvblRhYmxlSXRlbTtcclxuICAgIH0+O1xyXG4gICAgQFZpZXdDaGlsZHJlbignY29sbGVjdGlvblJvdycsIHsgcmVhZDogQ2RrRHJhZyB9KSBjb2xsZWN0aW9uUm93TGlzdDogUXVlcnlMaXN0PENka0RyYWc+O1xyXG4gICAgZHJhZ1JlZnM6IERyYWdSZWZbXSA9IFtdO1xyXG4gICAgYWJzb2x1dGVJbmRleDogeyBbaWQ6IHN0cmluZ106IG51bWJlciB9ID0ge307XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByb3RlY3RlZCBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBkcmFnRHJvcDogRHJhZ0Ryb3AsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihjaGFuZ2VEZXRlY3RvclJlZiwgbG9jYWxTdG9yYWdlU2VydmljZSwgZGF0YVNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBpZiAoY2hhbmdlcy5zdWJDb2xsZWN0aW9ucyB8fCBjaGFuZ2VzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsbENvbGxlY3Rpb25zOiBDb2xsZWN0aW9uVGFibGVJdGVtW10gPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIHRoaXMuaXRlbXMgPz8gW10pIHtcclxuICAgICAgICAgICAgICAgIGFsbENvbGxlY3Rpb25zLnB1c2goY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJDb2xsZWN0aW9uTWF0Y2hlcyA9IHRoaXMuZ2V0U3ViY29sbGVjdGlvbnMoY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBhbGxDb2xsZWN0aW9ucy5wdXNoKC4uLnN1YkNvbGxlY3Rpb25NYXRjaGVzLmZsYXQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWxsQ29sbGVjdGlvbnMuZm9yRWFjaCgoY29sbGVjdGlvbiwgaW5kZXgpID0+ICh0aGlzLmFic29sdXRlSW5kZXhbY29sbGVjdGlvbi5pZF0gPSBpbmRleCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uUm93TGlzdC5jaGFuZ2VzLnN1YnNjcmliZSgodmFsOiBRdWVyeUxpc3Q8Q2RrRHJhZz4pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kcm9wTGlzdC5nZXRTb3J0ZWRJdGVtcygpLmZvckVhY2goaXRlbSA9PiB0aGlzLmRyb3BMaXN0LnJlbW92ZUl0ZW0oaXRlbSkpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiB2YWwudG9BcnJheSgpKSB7XHJcbiAgICAgICAgICAgICAgICByZWYuZHJvcENvbnRhaW5lciA9IHRoaXMuZHJvcExpc3Q7XHJcbiAgICAgICAgICAgICAgICByZWYuX2RyYWdSZWYuX3dpdGhEcm9wQ29udGFpbmVyKHRoaXMuZHJvcExpc3QuX2Ryb3BMaXN0UmVmKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJvcExpc3QuYWRkSXRlbShyZWYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3ViY29sbGVjdGlvbnMoaXRlbTogQ29sbGVjdGlvblRhYmxlSXRlbSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN1YkNvbGxlY3Rpb25zPy5maWx0ZXIoYyA9PiBjLnBhcmVudElkID09PSBpdGVtLmlkKSA/PyBbXTtcclxuICAgIH1cclxuXHJcbiAgICBzb3J0UHJlZGljYXRlID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IENka0RyYWc8eyBkZXB0aDogbnVtYmVyOyBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uVGFibGVJdGVtIH0+KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXRlbUF0SW5kZXggPSB0aGlzLmRyb3BMaXN0LmdldFNvcnRlZEl0ZW1zKClbaW5kZXhdO1xyXG4gICAgICAgIHJldHVybiBpdGVtQXRJbmRleD8uZGF0YS5jb2xsZWN0aW9uLnBhcmVudElkID09PSBpdGVtLmRhdGEuY29sbGVjdGlvbi5wYXJlbnRJZDtcclxuICAgIH07XHJcblxyXG4gICAgb25Ecm9wKFxyXG4gICAgICAgIGV2ZW50OiBDZGtEcmFnRHJvcDx7XHJcbiAgICAgICAgICAgIGRlcHRoOiBudW1iZXI7XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IENvbGxlY3Rpb25UYWJsZUl0ZW07XHJcbiAgICAgICAgfT4sXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBpc1RvcExldmVsID0gZXZlbnQuaXRlbS5kYXRhLmNvbGxlY3Rpb24uYnJlYWRjcnVtYnMubGVuZ3RoID09PSAyO1xyXG4gICAgICAgIGNvbnN0IHBhZ2VJbmRleE9mZnNldCA9IGlzVG9wTGV2ZWwgPyAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5pdGVtc1BlclBhZ2UgOiAwO1xyXG4gICAgICAgIGNvbnN0IHBhcmVudElkID0gZXZlbnQuaXRlbS5kYXRhLmNvbGxlY3Rpb24ucGFyZW50SWQ7XHJcbiAgICAgICAgY29uc3QgcGFyZW50SW5kZXggPSB0aGlzLml0ZW1zLmZpbmRJbmRleChpID0+IGkuaWQgPT09IHBhcmVudElkKTtcclxuICAgICAgICBjb25zdCBhZGp1c3RlZEluZGV4ID0gcGFnZUluZGV4T2Zmc2V0ICsgZXZlbnQuY3VycmVudEluZGV4IC0gcGFyZW50SW5kZXggLSAxO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlT3JkZXIuZW1pdCh7XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb25JZDogZXZlbnQuaXRlbS5kYXRhLmNvbGxlY3Rpb24uaWQsXHJcbiAgICAgICAgICAgIGluZGV4OiBhZGp1c3RlZEluZGV4LFxyXG4gICAgICAgICAgICBwYXJlbnRJZDogZXZlbnQuaXRlbS5kYXRhLmNvbGxlY3Rpb24ucGFyZW50SWQsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChpc1RvcExldmVsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMgPSBbLi4udGhpcy5pdGVtc107XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGV2ZW50LnByZXZpb3VzSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnNwbGljZShldmVudC5jdXJyZW50SW5kZXgsIDAsIGV2ZW50Lml0ZW0uZGF0YS5jb2xsZWN0aW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLml0ZW1zLmZpbmQoaSA9PiBpLmlkID09PSBwYXJlbnRJZCk7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN1YkNvbGxlY3Rpb25zID0gdGhpcy5nZXRTdWJjb2xsZWN0aW9ucyhwYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWRQcmV2aW91c0luZGV4ID0gcGFnZUluZGV4T2Zmc2V0ICsgZXZlbnQucHJldmlvdXNJbmRleCAtIHBhcmVudEluZGV4IC0gMTtcclxuICAgICAgICAgICAgICAgIHN1YkNvbGxlY3Rpb25zLnNwbGljZShhZGp1c3RlZFByZXZpb3VzSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgc3ViQ29sbGVjdGlvbnMuc3BsaWNlKGV2ZW50LmN1cnJlbnRJbmRleCwgMCwgZXZlbnQuaXRlbS5kYXRhLmNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImJ1bGstYWN0aW9uc1wiPlxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwidmRyLWJ1bGstYWN0aW9uLW1lbnVcIj48L25nLWNvbnRlbnQ+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlclwiPlxyXG4gICAgPHRhYmxlXHJcbiAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgIFtjbGFzcy5uby1zZWxlY3RdPVwiZGlzYWJsZVNlbGVjdFwiXHJcbiAgICA+XHJcbiAgICAgICAgPHRoZWFkIFtjbGFzcy5pdGVtcy1zZWxlY3RlZF09XCJzZWxlY3Rpb25NYW5hZ2VyPy5zZWxlY3Rpb24ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImhlYWRpbmctcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJzZWxlY3Rpb25NYW5hZ2VyXCIgY2xhc3M9XCJzZWxlY3Rpb24tY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctaGFuZGxlLXNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJDaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uTWFuYWdlcj8uYXJlQWxsQ3VycmVudEl0ZW1zU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlQWxsQ2xpY2soKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB2aXNpYmxlU29ydGVkQ29sdW1uczsgbGFzdCBhcyBpc0xhc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5leHBhbmRdPVwiY29sdW1uLmV4cGFuZFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwtY29udGVudFwiIFtuZ0NsYXNzXT1cImNvbHVtbi5hbGlnblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb2x1bW4uaGVhZGluZyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbHVtbi5zb3J0IGFzIHNvcnRcIiBjbGFzcz1cInNvcnQtdG9nZ2xlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzb3J0LnRvZ2dsZVNvcnRPcmRlcigpXCIgW2NsYXNzLmFjdGl2ZV09XCJzb3J0LnNvcnRPcmRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiAqbmdJZj1cIiFzb3J0LnNvcnRPcmRlclwiIHNoYXBlPVwidHdvLXdheS1hcnJvd3MgbGVmdFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uICpuZ0lmPVwic29ydC5zb3J0T3JkZXIgPT09ICdBU0MnXCIgc2hhcGU9XCJhcnJvdyB1cFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uICpuZ0lmPVwic29ydC5zb3J0T3JkZXIgPT09ICdERVNDJ1wiIHNoYXBlPVwiYXJyb3cgZG93blwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LWxhYmVsXCIgKm5nSWY9XCJzb3J0LnNvcnRPcmRlclwiPnt7IHNvcnQuc29ydE9yZGVyIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLXBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWRhdGEtdGFibGUtY29sdW0tcGlja2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdWlMYW5ndWFnZV09XCJ1aUxhbmd1YWdlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInNvcnRlZENvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlb3JkZXIpPVwib25Db2x1bW5SZW9yZGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc2V0Q29sdW1ucyk9XCJvbkNvbHVtbnNSZXNldCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWRhdGEtdGFibGUtY29sdW0tcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPHRyICpuZ0lmPVwic2VhcmNoQ29tcG9uZW50IHx8IGN1c3RvbVNlYXJjaFRlbXBsYXRlIHx8IGZpbHRlcnM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJ2aXNpYmxlU29ydGVkQ29sdW1ucy5sZW5ndGggKyAoc2VsZWN0aW9uTWFuYWdlciA/IDIgOiAxKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXItcm93XCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNob3dTZWFyY2hGaWx0ZXJSb3dcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tZ2hvc3QgdG9nZ2xlLXNlYXJjaC1maWx0ZXItcm93XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93U2VhcmNoRmlsdGVyUm93XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlYXJjaEZpbHRlclJvdygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidjb21tb24uc2VhcmNoLWFuZC1maWx0ZXItbGlzdCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwic2VhcmNoXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXJvdy13cmFwcGVyXCIgW2NsYXNzLmhpZGRlbl09XCIhc2hvd1NlYXJjaEZpbHRlclJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VhcmNoQ29tcG9uZW50Py50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tU2VhcmNoVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kYXRhLXRhYmxlLWZpbHRlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGl2ZUZpbHRlciBvZiBmaWx0ZXJzLmFjdGl2ZUZpbHRlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyV2l0aFZhbHVlXT1cImFjdGl2ZUZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1kYXRhLXRhYmxlLWZpbHRlcnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kYXRhLXRhYmxlLWZpbHRlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1kYXRhLXRhYmxlLWZpbHRlcnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgPHRib2R5XHJcbiAgICAgICAgICAgIGNka0Ryb3BMaXN0XHJcbiAgICAgICAgICAgIGNka0Ryb3BMaXN0TG9ja0F4aXM9XCJ5XCJcclxuICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3AoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGVdPVwic29ydFByZWRpY2F0ZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgIGxldCBpdGVtIG9mIGl0ZW1zXHJcbiAgICAgICAgICAgICAgICAgICAgfCBwYWdpbmF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNQZXJQYWdlOiBpdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiBjdXJyZW50UGFnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtczogdG90YWxJdGVtcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBpbmRleCBhcyBpO1xyXG4gICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZuXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2xsZWN0aW9uUm93VG1wXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtLCBpOiBpLCBkZXB0aDogMCB9XCJcclxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8dHIgKm5nSWY9XCIhaXRlbXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInZpc2libGVTb3J0ZWRDb2x1bW5zLmxlbmd0aCArIChzZWxlY3Rpb25NYW5hZ2VyID8gMiA6IDEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZW1wdHktcGxhY2Vob2xkZXIgW2VtcHR5U3RhdGVMYWJlbF09XCJlbXB0eVN0YXRlTGFiZWxcIj48L3Zkci1lbXB0eS1wbGFjZWhvbGRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgIDwvdGFibGU+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwidGFibGUtZm9vdGVyXCI+XHJcbiAgICA8dmRyLWl0ZW1zLXBlci1wYWdlLWNvbnRyb2xzXHJcbiAgICAgICAgKm5nSWY9XCJ0b3RhbEl0ZW1zXCJcclxuICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiXHJcbiAgICAgICAgKGl0ZW1zUGVyUGFnZUNoYW5nZSk9XCJpdGVtc1BlclBhZ2VDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgID48L3Zkci1pdGVtcy1wZXItcGFnZS1jb250cm9scz5cclxuICAgIDxkaXYgKm5nSWY9XCJ0b3RhbEl0ZW1zXCIgY2xhc3M9XCJwNSB0b3RhbC1pdGVtcy1jb3VudFwiPlxyXG4gICAgICAgIHt7ICdjb21tb24udG90YWwtaXRlbXMnIHwgdHJhbnNsYXRlIDogeyBjdXJyZW50U3RhcnQsIGN1cnJlbnRFbmQsIHRvdGFsSXRlbXMgfSB9fVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHZkci1wYWdpbmF0aW9uLWNvbnRyb2xzXHJcbiAgICAgICAgKm5nSWY9XCJ0b3RhbEl0ZW1zXCJcclxuICAgICAgICBbaWRdPVwiaWRcIlxyXG4gICAgICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiXHJcbiAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJpdGVtc1BlclBhZ2VcIlxyXG4gICAgICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXNcIlxyXG4gICAgICAgIChwYWdlQ2hhbmdlKT1cInBhZ2VDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgID48L3Zkci1wYWdpbmF0aW9uLWNvbnRyb2xzPlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29sbGVjdGlvblJvd1RtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtZGVwdGg9XCJkZXB0aFwiPlxyXG4gICAgPHRyICNjb2xsZWN0aW9uUm93IGNka0RyYWcgW2Nka0RyYWdEYXRhXT1cInsgZGVwdGg6IGRlcHRoLCBjb2xsZWN0aW9uOiBpdGVtIH1cIiBjZGtEcmFnQm91bmRhcnk9XCJ0Ym9keVwiPlxyXG4gICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAqbmdJZj1cInNlbGVjdGlvbk1hbmFnZXJcIlxyXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZUluZGV4ID09PSBhYnNvbHV0ZUluZGV4W2l0ZW0uaWRdXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3Rpb24tY29sXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJhZy1oYW5kbGVcIiBjZGtEcmFnSGFuZGxlIFt0aXRsZV09XCInY2F0YWxvZy5yZW9yZGVyLWNvbGxlY3Rpb24nIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZHJhZy1oYW5kbGVcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsckNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uTWFuYWdlcj8uaXNTZWxlY3RlZChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soaXRlbSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHZpc2libGVTb3J0ZWRDb2x1bW5zXCJcclxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVJbmRleCA9PT0gYWJzb2x1dGVJbmRleFtpdGVtLmlkXVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbC1jb250ZW50XCIgW25nQ2xhc3NdPVwiY29sdW1uLmFsaWduXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW4udGVtcGxhdGU7IGNvbnRleHQ6IHsgaXRlbTogaXRlbSwgZGVwdGg6IGRlcHRoIH1cIlxyXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZCBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZUluZGV4ID09PSBhYnNvbHV0ZUluZGV4W2l0ZW0uaWRdXCI+PCEtLSBjb2x1bW4gc2VsZWN0IC0tPjwvdGQ+XHJcbiAgICA8L3RyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3ViQ29sbGVjdGlvbiBvZiBnZXRTdWJjb2xsZWN0aW9ucyhpdGVtKVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2xsZWN0aW9uUm93VG1wOyBjb250ZXh0OiB7IGl0ZW06IHN1YkNvbGxlY3Rpb24sIGRlcHRoOiBkZXB0aCArIDEgfVwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==