@vendure/admin-ui 2.0.0-next.2 → 2.0.0-next.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/catalog/catalog.module.d.ts +15 -11
- package/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.d.ts +22 -0
- package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.d.ts +41 -0
- package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.d.ts +4 -0
- package/catalog/components/collection-contents/collection-contents.component.d.ts +10 -2
- package/catalog/components/collection-detail/collection-detail.component.d.ts +13 -4
- package/catalog/components/collection-list/collection-list-bulk-actions.d.ts +6 -0
- package/catalog/components/collection-list/collection-list.component.d.ts +9 -5
- package/catalog/components/collection-tree/array-to-tree.d.ts +1 -1
- package/catalog/components/collection-tree/collection-tree-node.component.d.ts +14 -6
- package/catalog/components/collection-tree/collection-tree.component.d.ts +4 -1
- package/catalog/components/facet-list/facet-list-bulk-actions.d.ts +5 -0
- package/catalog/components/facet-list/facet-list.component.d.ts +2 -1
- package/catalog/components/generate-product-variants/generate-product-variants.component.d.ts +3 -3
- package/catalog/components/option-value-input/option-value-input.component.d.ts +21 -9
- package/catalog/components/product-detail/product-detail.component.d.ts +1 -1
- package/catalog/components/product-list/product-list-bulk-actions.d.ts +6 -0
- package/catalog/components/product-list/product-list.component.d.ts +4 -2
- package/catalog/components/product-variants-editor/product-variants-editor.component.d.ts +22 -12
- package/catalog/components/product-variants-list/product-variants-list.component.d.ts +1 -0
- package/catalog/public_api.d.ts +6 -1
- package/core/common/component-registry-types.d.ts +1 -1
- package/core/common/generated-types.d.ts +3184 -195
- package/core/common/utilities/bulk-action-utils.d.ts +19 -0
- package/core/common/utilities/configurable-operation-utils.d.ts +7 -2
- package/core/common/utilities/selection-manager.d.ts +30 -0
- package/core/common/version.d.ts +1 -1
- package/core/components/app-shell/app-shell.component.d.ts +1 -0
- package/core/data/definitions/collection-definitions.d.ts +4 -0
- package/core/data/definitions/facet-definitions.d.ts +3 -0
- package/core/data/definitions/order-definitions.d.ts +14 -0
- package/core/data/definitions/product-definitions.d.ts +2 -0
- package/core/data/providers/collection-data.service.d.ts +7 -0
- package/core/data/providers/facet-data.service.d.ts +3 -0
- package/core/data/providers/order-data.service.d.ts +18 -0
- package/core/data/providers/product-data.service.d.ts +2 -0
- package/core/providers/bulk-action-registry/bulk-action-registry.service.d.ts +9 -0
- package/core/providers/bulk-action-registry/bulk-action-types.d.ts +149 -0
- package/core/providers/bulk-action-registry/register-bulk-action.d.ts +53 -0
- package/core/providers/local-storage/local-storage.service.d.ts +1 -0
- package/core/providers/modal/modal.types.d.ts +2 -0
- package/core/providers/nav-builder/nav-builder-types.d.ts +1 -0
- package/core/public_api.d.ts +24 -1
- package/core/shared/components/asset-gallery/asset-gallery.component.d.ts +27 -3
- package/core/shared/components/bulk-action-menu/bulk-action-menu.component.d.ts +32 -0
- package/core/shared/components/configurable-input/configurable-input.component.d.ts +8 -3
- package/core/shared/components/custom-field-control/custom-field-control.component.d.ts +6 -2
- package/core/shared/components/data-table/data-table.component.d.ts +29 -7
- package/core/shared/components/dropdown/dropdown-menu.component.d.ts +2 -1
- package/core/shared/components/facet-value-selector/facet-value-selector.component.d.ts +3 -2
- package/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.d.ts +38 -0
- package/{catalog → core/shared}/components/product-search-input/product-search-input.component.d.ts +1 -1
- package/core/shared/components/radio-card/radio-card-fieldset.component.d.ts +24 -0
- package/core/shared/components/radio-card/radio-card.component.d.ts +22 -0
- package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.d.ts +31 -0
- package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.d.ts +34 -0
- package/core/shared/components/rich-text-editor/prosemirror/custom-nodes.d.ts +4 -0
- package/core/shared/components/rich-text-editor/prosemirror/inputrules.d.ts +5 -5
- package/core/shared/components/rich-text-editor/prosemirror/menu/links.d.ts +1 -1
- package/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.d.ts +12 -0
- package/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.d.ts +9 -0
- package/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.d.ts +14 -0
- package/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.d.ts +7 -0
- package/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.d.ts +1 -1
- package/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.d.ts +7 -0
- package/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.d.ts +13 -0
- package/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.d.ts +7 -3
- package/core/shared/components/rich-text-editor/prosemirror/types.d.ts +0 -2
- package/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.d.ts +21 -0
- package/core/shared/components/rich-text-editor/rich-text-editor.component.d.ts +6 -2
- package/core/shared/components/select-toggle/select-toggle.component.d.ts +2 -1
- package/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.d.ts +30 -0
- package/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.d.ts +22 -0
- package/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.d.ts +5 -17
- package/core/shared/dynamic-form-inputs/combination-mode-form-input/combination-mode-form-input.component.d.ts +28 -0
- package/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.d.ts +2 -0
- package/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.d.ts +23 -0
- package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +5 -1
- package/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.d.ts +6 -3
- package/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.d.ts +10 -2
- package/core/shared/pipes/custom-field-description.pipe.d.ts +11 -0
- package/core/shared/pipes/custom-field-label.pipe.d.ts +4 -10
- package/core/shared/shared.module.d.ts +68 -57
- package/customer/components/customer-group-list/customer-group-list.component.d.ts +6 -4
- package/customer/components/customer-group-member-list/customer-group-member-list.component.d.ts +11 -4
- package/esm2020/catalog/catalog.module.mjs +31 -10
- package/esm2020/catalog/components/apply-facet-dialog/apply-facet-dialog.component.mjs +1 -1
- package/esm2020/catalog/components/assets/assets.component.mjs +2 -2
- package/esm2020/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.mjs +4 -1
- package/esm2020/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.mjs +50 -0
- package/esm2020/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.mjs +84 -0
- package/esm2020/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.mjs +69 -0
- package/esm2020/catalog/components/collection-contents/collection-contents.component.mjs +61 -13
- package/esm2020/catalog/components/collection-detail/collection-detail.component.mjs +70 -32
- package/esm2020/catalog/components/collection-list/collection-list-bulk-actions.mjs +143 -0
- package/esm2020/catalog/components/collection-list/collection-list.component.mjs +46 -12
- package/esm2020/catalog/components/collection-tree/array-to-tree.mjs +3 -3
- package/esm2020/catalog/components/collection-tree/collection-tree-node.component.mjs +36 -10
- package/esm2020/catalog/components/collection-tree/collection-tree.component.mjs +9 -4
- package/esm2020/catalog/components/facet-detail/facet-detail.component.mjs +3 -3
- package/esm2020/catalog/components/facet-list/facet-list-bulk-actions.mjs +202 -0
- package/esm2020/catalog/components/facet-list/facet-list.component.mjs +14 -5
- package/esm2020/catalog/components/generate-product-variants/generate-product-variants.component.mjs +12 -4
- package/esm2020/catalog/components/option-value-input/option-value-input.component.mjs +70 -11
- package/esm2020/catalog/components/product-detail/product-detail.component.mjs +36 -24
- package/esm2020/catalog/components/product-list/product-list-bulk-actions.mjs +168 -0
- package/esm2020/catalog/components/product-list/product-list.component.mjs +13 -9
- package/esm2020/catalog/components/product-variants-editor/product-variants-editor.component.mjs +130 -19
- package/esm2020/catalog/components/product-variants-list/product-variants-list.component.mjs +9 -3
- package/esm2020/catalog/providers/routing/collection-resolver.mjs +2 -1
- package/esm2020/catalog/public_api.mjs +7 -2
- package/esm2020/core/app.component.module.mjs +1 -1
- package/esm2020/core/common/base-detail.component.mjs +1 -1
- package/esm2020/core/common/component-registry-types.mjs +1 -1
- package/esm2020/core/common/deactivate-aware.mjs +1 -1
- package/esm2020/core/common/generated-types.mjs +31 -1
- package/esm2020/core/common/introspection-result.mjs +296 -189
- package/esm2020/core/common/utilities/bulk-action-utils.mjs +35 -0
- package/esm2020/core/common/utilities/configurable-operation-utils.mjs +37 -10
- package/esm2020/core/common/utilities/selection-manager.mjs +96 -0
- package/esm2020/core/common/version.mjs +2 -2
- package/esm2020/core/components/app-shell/app-shell.component.mjs +6 -5
- package/esm2020/core/components/breadcrumb/breadcrumb.component.mjs +2 -2
- package/esm2020/core/components/channel-switcher/channel-switcher.component.mjs +1 -1
- package/esm2020/core/components/main-nav/main-nav.component.mjs +3 -3
- package/esm2020/core/components/user-menu/user-menu.component.mjs +1 -1
- package/esm2020/core/core.module.mjs +1 -1
- package/esm2020/core/data/definitions/collection-definitions.mjs +47 -1
- package/esm2020/core/data/definitions/facet-definitions.mjs +31 -1
- package/esm2020/core/data/definitions/order-definitions.mjs +583 -455
- package/esm2020/core/data/definitions/product-definitions.mjs +23 -1
- package/esm2020/core/data/definitions/shared-definitions.mjs +29 -28
- package/esm2020/core/data/providers/collection-data.service.mjs +20 -2
- package/esm2020/core/data/providers/customer-data.service.mjs +6 -1
- package/esm2020/core/data/providers/facet-data.service.mjs +18 -2
- package/esm2020/core/data/providers/order-data.service.mjs +43 -2
- package/esm2020/core/data/providers/product-data.service.mjs +10 -2
- package/esm2020/core/data/providers/promotion-data.service.mjs +1 -1
- package/esm2020/core/data/utils/remove-readonly-custom-fields.mjs +8 -1
- package/esm2020/core/providers/bulk-action-registry/bulk-action-registry.service.mjs +28 -0
- package/esm2020/core/providers/bulk-action-registry/bulk-action-types.mjs +2 -0
- package/esm2020/core/providers/bulk-action-registry/register-bulk-action.mjs +63 -0
- package/esm2020/core/providers/dashboard-widget/dashboard-widget.service.mjs +1 -4
- package/esm2020/core/providers/local-storage/local-storage.service.mjs +1 -1
- package/esm2020/core/providers/modal/modal.service.mjs +2 -1
- package/esm2020/core/providers/modal/modal.types.mjs +1 -1
- package/esm2020/core/providers/nav-builder/nav-builder-types.mjs +1 -1
- package/esm2020/core/public_api.mjs +25 -2
- package/esm2020/core/shared/components/action-bar/action-bar.component.mjs +7 -15
- package/esm2020/core/shared/components/address-form/address-form.component.mjs +3 -3
- package/esm2020/core/shared/components/asset-gallery/asset-gallery.component.mjs +34 -51
- package/esm2020/core/shared/components/asset-preview/asset-preview.component.mjs +4 -4
- package/esm2020/core/shared/components/asset-preview-links/asset-preview-links.component.mjs +1 -1
- package/esm2020/core/shared/components/bulk-action-menu/bulk-action-menu.component.mjs +97 -0
- package/esm2020/core/shared/components/configurable-input/configurable-input.component.mjs +22 -10
- package/esm2020/core/shared/components/custom-field-control/custom-field-control.component.mjs +18 -10
- package/esm2020/core/shared/components/data-table/data-table.component.mjs +64 -14
- package/esm2020/core/shared/components/datetime-picker/datetime-picker.component.mjs +1 -1
- package/esm2020/core/shared/components/dropdown/dropdown-menu.component.mjs +26 -23
- package/esm2020/core/shared/components/dropdown/dropdown-trigger.directive.mjs +1 -1
- package/esm2020/core/shared/components/entity-info/entity-info.component.mjs +1 -1
- package/esm2020/core/shared/components/facet-value-selector/facet-value-selector.component.mjs +13 -6
- package/esm2020/core/shared/components/formatted-address/formatted-address.component.mjs +3 -3
- package/esm2020/core/shared/components/help-tooltip/help-tooltip.component.mjs +2 -2
- package/esm2020/core/shared/components/history-entry-detail/history-entry-detail.component.mjs +1 -1
- package/esm2020/core/shared/components/language-selector/language-selector.component.mjs +3 -3
- package/esm2020/core/shared/components/object-tree/object-tree.component.mjs +1 -1
- package/esm2020/core/shared/components/order-state-label/order-state-label.component.mjs +2 -1
- package/esm2020/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.mjs +135 -0
- package/esm2020/core/shared/components/product-search-input/product-search-input.component.mjs +108 -0
- package/esm2020/core/shared/components/product-variant-selector/product-variant-selector.component.mjs +2 -2
- package/esm2020/core/shared/components/radio-card/radio-card-fieldset.component.mjs +54 -0
- package/esm2020/core/shared/components/radio-card/radio-card.component.mjs +53 -0
- package/esm2020/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.mjs +3 -3
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.mjs +136 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.mjs +46 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/custom-nodes.mjs +57 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/links.mjs +4 -4
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.mjs +22 -1
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.mjs +12 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu.mjs +73 -18
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.mjs +16 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.mjs +100 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.mjs +96 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.mjs +166 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.mjs +47 -18
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/types.mjs +1 -1
- package/esm2020/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.mjs +59 -0
- package/esm2020/core/shared/components/rich-text-editor/rich-text-editor.component.mjs +22 -10
- package/esm2020/core/shared/components/select-toggle/select-toggle.component.mjs +6 -3
- package/esm2020/core/shared/components/simple-dialog/simple-dialog.component.mjs +3 -3
- package/esm2020/core/shared/components/ui-extension-point/ui-extension-point.component.mjs +1 -1
- package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.mjs +57 -0
- package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.mjs +63 -0
- package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.mjs +48 -83
- package/esm2020/core/shared/dynamic-form-inputs/combination-mode-form-input/combination-mode-form-input.component.mjs +45 -0
- package/esm2020/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.mjs +3 -3
- package/esm2020/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.mjs +12 -3
- package/esm2020/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.mjs +48 -0
- package/esm2020/core/shared/dynamic-form-inputs/register-dynamic-input-components.mjs +7 -1
- package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.mjs +11 -9
- package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.mjs +1 -1
- package/esm2020/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.mjs +21 -11
- package/esm2020/core/shared/pipes/custom-field-description.pipe.mjs +30 -0
- package/esm2020/core/shared/pipes/custom-field-label.pipe.mjs +7 -19
- package/esm2020/core/shared/pipes/locale-currency.pipe.mjs +10 -2
- package/esm2020/core/shared/pipes/state-i18n-token.pipe.mjs +2 -1
- package/esm2020/core/shared/shared.module.mjs +49 -5
- package/esm2020/customer/components/address-card/address-card.component.mjs +1 -1
- package/esm2020/customer/components/customer-detail/customer-detail.component.mjs +1 -1
- package/esm2020/customer/components/customer-group-list/customer-group-list.component.mjs +33 -18
- package/esm2020/customer/components/customer-group-member-list/customer-group-member-list.component.mjs +3 -3
- package/esm2020/customer/components/customer-history/customer-history.component.mjs +1 -1
- package/esm2020/customer/components/customer-list/customer-list.component.mjs +3 -3
- package/esm2020/dashboard/components/dashboard/dashboard.component.mjs +2 -2
- package/esm2020/dashboard/components/dashboard-widget/dashboard-widget.component.mjs +2 -2
- package/esm2020/dashboard/dashboard.module.mjs +6 -2
- package/esm2020/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.mjs +1 -1
- package/esm2020/dashboard/widgets/order-summary-widget/order-summary-widget.component.mjs +2 -2
- package/esm2020/login/components/login/login.component.mjs +3 -3
- package/esm2020/marketing/components/promotion-detail/promotion-detail.component.mjs +3 -3
- package/esm2020/marketing/components/promotion-list/promotion-list.component.mjs +1 -1
- package/esm2020/order/components/cancel-order-dialog/cancel-order-dialog.component.mjs +1 -1
- package/esm2020/order/components/coupon-code-selector/coupon-code-selector.component.mjs +42 -0
- package/esm2020/order/components/draft-order-detail/draft-order-detail.component.mjs +187 -0
- package/esm2020/order/components/draft-order-variant-selector/draft-order-variant-selector.component.mjs +59 -0
- package/esm2020/order/components/fulfill-order-dialog/fulfill-order-dialog.component.mjs +7 -3
- package/esm2020/order/components/fulfillment-card/fulfillment-card.component.mjs +1 -1
- package/esm2020/order/components/fulfillment-detail/fulfillment-detail.component.mjs +8 -17
- package/esm2020/order/components/line-fulfillment/line-fulfillment.component.mjs +8 -22
- package/esm2020/order/components/order-custom-fields-card/order-custom-fields-card.component.mjs +30 -6
- package/esm2020/order/components/order-detail/order-detail.component.mjs +80 -40
- package/esm2020/order/components/order-editor/order-editor.component.mjs +15 -14
- package/esm2020/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.mjs +1 -1
- package/esm2020/order/components/order-history/order-history.component.mjs +1 -1
- package/esm2020/order/components/order-list/order-list.component.mjs +40 -17
- package/esm2020/order/components/order-payment-card/order-payment-card.component.mjs +3 -3
- package/esm2020/order/components/order-table/order-table.component.mjs +29 -6
- package/esm2020/order/components/refund-order-dialog/refund-order-dialog.component.mjs +2 -2
- package/esm2020/order/components/select-address-dialog/select-address-dialog.component.mjs +89 -0
- package/esm2020/order/components/select-address-dialog/select-address-dialog.graphql.mjs +14 -0
- package/esm2020/order/components/select-customer-dialog/select-customer-dialog.component.mjs +59 -0
- package/esm2020/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.mjs +31 -0
- package/esm2020/order/order.module.mjs +20 -2
- package/esm2020/order/order.routes.mjs +23 -4
- package/esm2020/order/providers/routing/order-resolver.mjs +29 -11
- package/esm2020/order/providers/routing/order.guard.mjs +37 -0
- package/esm2020/order/public_api.mjs +9 -1
- package/esm2020/settings/components/administrator-list/administrator-list.component.mjs +1 -1
- package/esm2020/settings/components/channel-list/channel-list.component.mjs +1 -1
- package/esm2020/settings/components/country-list/country-list.component.mjs +3 -3
- package/esm2020/settings/components/payment-method-detail/payment-method-detail.component.mjs +1 -1
- package/esm2020/settings/components/payment-method-list/payment-method-list.component.mjs +1 -1
- package/esm2020/settings/components/permission-grid/permission-grid.component.mjs +1 -1
- package/esm2020/settings/components/profile/profile.component.mjs +3 -3
- package/esm2020/settings/components/role-list/role-list.component.mjs +1 -1
- package/esm2020/settings/components/shipping-method-detail/shipping-method-detail.component.mjs +4 -2
- package/esm2020/settings/components/shipping-method-list/shipping-method-list.component.mjs +1 -1
- package/esm2020/settings/components/tax-category-list/tax-category-list.component.mjs +1 -1
- package/esm2020/settings/components/tax-rate-list/tax-rate-list.component.mjs +1 -1
- package/esm2020/settings/components/zone-detail-dialog/zone-detail-dialog.component.mjs +2 -2
- package/esm2020/settings/components/zone-list/zone-list.component.mjs +3 -3
- package/esm2020/settings/components/zone-member-list/zone-member-list.component.mjs +3 -3
- package/esm2020/system/components/health-check/health-check.component.mjs +2 -2
- package/esm2020/system/components/job-list/job-list.component.mjs +1 -1
- package/fesm2015/vendure-admin-ui-catalog.mjs +1206 -228
- package/fesm2015/vendure-admin-ui-catalog.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-core.mjs +9451 -7332
- package/fesm2015/vendure-admin-ui-core.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-customer.mjs +36 -23
- package/fesm2015/vendure-admin-ui-customer.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-dashboard.mjs +11 -7
- package/fesm2015/vendure-admin-ui-dashboard.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-login.mjs +2 -2
- package/fesm2015/vendure-admin-ui-login.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-marketing.mjs +3 -3
- package/fesm2015/vendure-admin-ui-marketing.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-order.mjs +1184 -599
- package/fesm2015/vendure-admin-ui-order.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-settings.mjs +21 -19
- package/fesm2015/vendure-admin-ui-settings.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-system.mjs +3 -3
- package/fesm2020/vendure-admin-ui-catalog.mjs +1190 -230
- package/fesm2020/vendure-admin-ui-catalog.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-core.mjs +9539 -7437
- package/fesm2020/vendure-admin-ui-core.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-customer.mjs +36 -23
- package/fesm2020/vendure-admin-ui-customer.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-dashboard.mjs +11 -7
- package/fesm2020/vendure-admin-ui-dashboard.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-login.mjs +2 -2
- package/fesm2020/vendure-admin-ui-login.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-marketing.mjs +3 -3
- package/fesm2020/vendure-admin-ui-marketing.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-order.mjs +1194 -614
- package/fesm2020/vendure-admin-ui-order.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-settings.mjs +21 -19
- package/fesm2020/vendure-admin-ui-settings.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-system.mjs +3 -3
- package/order/components/coupon-code-selector/coupon-code-selector.component.d.ts +21 -0
- package/order/components/draft-order-detail/draft-order-detail.component.d.ts +52 -0
- package/order/components/draft-order-variant-selector/draft-order-variant-selector.component.d.ts +24 -0
- package/order/components/order-custom-fields-card/order-custom-fields-card.component.d.ts +4 -2
- package/order/components/order-editor/order-editor.component.d.ts +1 -6
- package/order/components/order-list/order-list.component.d.ts +2 -0
- package/order/components/order-table/order-table.component.d.ts +12 -2
- package/order/components/select-address-dialog/select-address-dialog.component.d.ts +27 -0
- package/order/components/select-address-dialog/select-address-dialog.graphql.d.ts +1 -0
- package/order/components/select-customer-dialog/select-customer-dialog.component.d.ts +25 -0
- package/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.d.ts +19 -0
- package/order/order.module.d.ts +9 -3
- package/order/providers/routing/order-resolver.d.ts +8 -3
- package/order/providers/routing/order.guard.d.ts +12 -0
- package/order/public_api.d.ts +8 -0
- package/package.json +13 -12
- package/settings/components/zone-member-list/zone-member-list.component.d.ts +3 -1
- package/static/i18n-messages/cs.json +50 -3
- package/static/i18n-messages/de.json +53 -3
- package/static/i18n-messages/en.json +55 -8
- package/static/i18n-messages/es.json +50 -3
- package/static/i18n-messages/fr.json +50 -3
- package/static/i18n-messages/it.json +50 -3
- package/static/i18n-messages/pl.json +50 -3
- package/static/i18n-messages/pt_BR.json +50 -3
- package/static/i18n-messages/pt_PT.json +50 -3
- package/static/i18n-messages/ru.json +50 -3
- package/static/i18n-messages/uk.json +50 -3
- package/static/i18n-messages/zh_Hans.json +50 -3
- package/static/i18n-messages/zh_Hant.json +50 -3
- package/static/styles/_variables.scss +4 -0
- package/static/styles/global/_forms.scss +8 -7
- package/static/styles/global/_overrides.scss +11 -1
- package/static/styles/global/_sass-overrides.scss +3 -0
- package/static/styles/global/_utilities.scss +14 -0
- package/static/styles/styles.scss +1 -0
- package/static/styles/theme/default.scss +13 -1
- package/static/styles/ui-extension-theme.scss +1 -0
- package/static/theme.min.css +1 -1
- package/core/shared/components/rich-text-editor/prosemirror/menu/images.d.ts +0 -4
- package/esm2020/catalog/components/product-search-input/product-search-input.component.mjs +0 -107
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/images.mjs +0 -36
|
@@ -25,7 +25,7 @@ class DashboardWidgetComponent {
|
|
|
25
25
|
const loadComponentResult = this.widgetConfig.loadComponent();
|
|
26
26
|
const componentType = loadComponentResult instanceof Promise ? await loadComponentResult : loadComponentResult;
|
|
27
27
|
this.componentRef = this.portal.createComponent(this.componentFactoryResolver.resolveComponentFactory(componentType));
|
|
28
|
-
this.componentRef.changeDetectorRef.
|
|
28
|
+
this.componentRef.changeDetectorRef.detectChanges();
|
|
29
29
|
}
|
|
30
30
|
ngOnDestroy() {
|
|
31
31
|
if (this.componentRef) {
|
|
@@ -150,10 +150,10 @@ class DashboardComponent {
|
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
DashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DashboardComponent, deps: [{ token: i1.DashboardWidgetService }, { token: i1.LocalStorageService }, { token: i0.ChangeDetectorRef }, { token: i1.DataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
153
|
-
DashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: DashboardComponent, selector: "vdr-dashboard", ngImport: i0, template: "<div class=\"widget-header\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'dashboard.add-widget' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n *ngFor=\"let id of availableWidgetIds$ | async\"\r\n (click)=\"addWidget(id)\"\r\n >\r\n {{ id }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n</div>\r\n<div cdkDropListGroup>\r\n <div\r\n class=\"clr-row dashboard-row\"\r\n *ngFor=\"let row of widgetLayout; index as rowIndex; trackBy: trackRow\"\r\n cdkDropList\r\n (cdkDropListDropped)=\"drop($event)\"\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListData]=\"{ index: rowIndex }\"\r\n >\r\n <div\r\n *ngFor=\"let widget of row; trackBy: trackRowItem\"\r\n class=\"dashboard-item\"\r\n [ngClass]=\"getClassForWidth(widget.width)\"\r\n cdkDrag\r\n [cdkDragData]=\"widget\"\r\n >\r\n <vdr-dashboard-widget\r\n *vdrIfPermissions=\"widget.config.requiresPermissions || null\"\r\n [widgetConfig]=\"widget.config\"\r\n >\r\n <div class=\"flex\">\r\n <div class=\"drag-handle\" cdkDragHandle>\r\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\r\n </div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <h4 class=\"dropdown-header\">{{ 'dashboard.widget-resize' | translate }}</h4>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"width === widget.width\"\r\n *ngFor=\"let width of getSupportedWidths(widget.config)\"\r\n (click)=\"setWidgetWidth(widget, width)\"\r\n >\r\n {{ 'dashboard.widget-width' | translate: { width: width } }}\r\n </button>\r\n <div class=\"dropdown-divider\" role=\"separator\"></div>\r\n <button class=\"button\" vdrDropdownItem (click)=\"removeWidget(widget)\">\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'dashboard.remove-widget' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-dashboard-widget>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".widget-header{display:flex;justify-content:flex-end}.placeholder{color:var(--color-grey-300);text-align:center}.placeholder .version{font-size:3em;margin:24px;line-height:1em}.placeholder ::ng-deep .clr-i-outline{fill:var(--color-grey-200)}vdr-dashboard-widget{margin-bottom:24px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.dashboard-row{padding:0;border-width:1;margin-bottom:6px;transition:padding .2s,margin .2s}.dashboard-row.cdk-drop-list-dragging,.dashboard-row.cdk-drop-list-receiving{border:1px dashed var(--color-component-border-200);padding:6px}.dashboard-row.cdk-drop-list-dragging .dashboard-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], components: [{ type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }, { type: DashboardWidgetComponent, selector: "vdr-dashboard-widget", inputs: ["widgetConfig"] }], directives: [{ type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i3$1.ClrIconCustomTag, selector: "clr-icon" }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { type: i5.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { type: i3$1.ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { type: i5.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"] }, { type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }], pipes: { "translate": i3.TranslatePipe, "async": i2.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
153
|
+
DashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: DashboardComponent, selector: "vdr-dashboard", ngImport: i0, template: "<div class=\"widget-header\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'dashboard.add-widget' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n *ngFor=\"let id of availableWidgetIds$ | async\"\r\n (click)=\"addWidget(id)\"\r\n >\r\n {{ id }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n</div>\r\n<div cdkDropListGroup>\r\n <div\r\n class=\"clr-row dashboard-row\"\r\n *ngFor=\"let row of widgetLayout; index as rowIndex; trackBy: trackRow\"\r\n cdkDropList\r\n (cdkDropListDropped)=\"drop($event)\"\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListData]=\"{ index: rowIndex }\"\r\n >\r\n <div\r\n *ngFor=\"let widget of row; trackBy: trackRowItem\"\r\n class=\"dashboard-item\"\r\n [ngClass]=\"getClassForWidth(widget.width)\"\r\n cdkDrag\r\n [cdkDragData]=\"widget\"\r\n >\r\n <vdr-dashboard-widget\r\n *vdrIfPermissions=\"widget.config.requiresPermissions || null\"\r\n [widgetConfig]=\"widget.config\"\r\n >\r\n <div class=\"flex\">\r\n <div class=\"drag-handle\" cdkDragHandle>\r\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\r\n </div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <h4 class=\"dropdown-header\">{{ 'dashboard.widget-resize' | translate }}</h4>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"width === widget.width\"\r\n *ngFor=\"let width of getSupportedWidths(widget.config)\"\r\n (click)=\"setWidgetWidth(widget, width)\"\r\n >\r\n {{ 'dashboard.widget-width' | translate: { width: width } }}\r\n </button>\r\n <div class=\"dropdown-divider\" role=\"separator\"></div>\r\n <button class=\"button\" vdrDropdownItem (click)=\"removeWidget(widget)\">\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'dashboard.remove-widget' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-dashboard-widget>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;max-width:1200px;margin:auto}.widget-header{display:flex;justify-content:flex-end}.placeholder{color:var(--color-grey-300);text-align:center}.placeholder .version{font-size:3em;margin:24px;line-height:1em}.placeholder ::ng-deep .clr-i-outline{fill:var(--color-grey-200)}vdr-dashboard-widget{margin-bottom:24px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.dashboard-row{padding:0;border-width:1;margin-bottom:6px;transition:padding .2s,margin .2s}.dashboard-row.cdk-drop-list-dragging,.dashboard-row.cdk-drop-list-receiving{border:1px dashed var(--color-component-border-200);padding:6px}.dashboard-row.cdk-drop-list-dragging .dashboard-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], components: [{ type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }, { type: DashboardWidgetComponent, selector: "vdr-dashboard-widget", inputs: ["widgetConfig"] }], directives: [{ type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i3$1.ClrIconCustomTag, selector: "clr-icon" }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { type: i5.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { type: i3$1.ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { type: i5.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"] }, { type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }], pipes: { "translate": i3.TranslatePipe, "async": i2.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
154
154
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DashboardComponent, decorators: [{
|
|
155
155
|
type: Component,
|
|
156
|
-
args: [{ selector: 'vdr-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"widget-header\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'dashboard.add-widget' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n *ngFor=\"let id of availableWidgetIds$ | async\"\r\n (click)=\"addWidget(id)\"\r\n >\r\n {{ id }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n</div>\r\n<div cdkDropListGroup>\r\n <div\r\n class=\"clr-row dashboard-row\"\r\n *ngFor=\"let row of widgetLayout; index as rowIndex; trackBy: trackRow\"\r\n cdkDropList\r\n (cdkDropListDropped)=\"drop($event)\"\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListData]=\"{ index: rowIndex }\"\r\n >\r\n <div\r\n *ngFor=\"let widget of row; trackBy: trackRowItem\"\r\n class=\"dashboard-item\"\r\n [ngClass]=\"getClassForWidth(widget.width)\"\r\n cdkDrag\r\n [cdkDragData]=\"widget\"\r\n >\r\n <vdr-dashboard-widget\r\n *vdrIfPermissions=\"widget.config.requiresPermissions || null\"\r\n [widgetConfig]=\"widget.config\"\r\n >\r\n <div class=\"flex\">\r\n <div class=\"drag-handle\" cdkDragHandle>\r\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\r\n </div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <h4 class=\"dropdown-header\">{{ 'dashboard.widget-resize' | translate }}</h4>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"width === widget.width\"\r\n *ngFor=\"let width of getSupportedWidths(widget.config)\"\r\n (click)=\"setWidgetWidth(widget, width)\"\r\n >\r\n {{ 'dashboard.widget-width' | translate: { width: width } }}\r\n </button>\r\n <div class=\"dropdown-divider\" role=\"separator\"></div>\r\n <button class=\"button\" vdrDropdownItem (click)=\"removeWidget(widget)\">\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'dashboard.remove-widget' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-dashboard-widget>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".widget-header{display:flex;justify-content:flex-end}.placeholder{color:var(--color-grey-300);text-align:center}.placeholder .version{font-size:3em;margin:24px;line-height:1em}.placeholder ::ng-deep .clr-i-outline{fill:var(--color-grey-200)}vdr-dashboard-widget{margin-bottom:24px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.dashboard-row{padding:0;border-width:1;margin-bottom:6px;transition:padding .2s,margin .2s}.dashboard-row.cdk-drop-list-dragging,.dashboard-row.cdk-drop-list-receiving{border:1px dashed var(--color-component-border-200);padding:6px}.dashboard-row.cdk-drop-list-dragging .dashboard-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
|
|
156
|
+
args: [{ selector: 'vdr-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"widget-header\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'dashboard.add-widget' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n *ngFor=\"let id of availableWidgetIds$ | async\"\r\n (click)=\"addWidget(id)\"\r\n >\r\n {{ id }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n</div>\r\n<div cdkDropListGroup>\r\n <div\r\n class=\"clr-row dashboard-row\"\r\n *ngFor=\"let row of widgetLayout; index as rowIndex; trackBy: trackRow\"\r\n cdkDropList\r\n (cdkDropListDropped)=\"drop($event)\"\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListData]=\"{ index: rowIndex }\"\r\n >\r\n <div\r\n *ngFor=\"let widget of row; trackBy: trackRowItem\"\r\n class=\"dashboard-item\"\r\n [ngClass]=\"getClassForWidth(widget.width)\"\r\n cdkDrag\r\n [cdkDragData]=\"widget\"\r\n >\r\n <vdr-dashboard-widget\r\n *vdrIfPermissions=\"widget.config.requiresPermissions || null\"\r\n [widgetConfig]=\"widget.config\"\r\n >\r\n <div class=\"flex\">\r\n <div class=\"drag-handle\" cdkDragHandle>\r\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\r\n </div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <h4 class=\"dropdown-header\">{{ 'dashboard.widget-resize' | translate }}</h4>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"width === widget.width\"\r\n *ngFor=\"let width of getSupportedWidths(widget.config)\"\r\n (click)=\"setWidgetWidth(widget, width)\"\r\n >\r\n {{ 'dashboard.widget-width' | translate: { width: width } }}\r\n </button>\r\n <div class=\"dropdown-divider\" role=\"separator\"></div>\r\n <button class=\"button\" vdrDropdownItem (click)=\"removeWidget(widget)\">\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'dashboard.remove-widget' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-dashboard-widget>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;max-width:1200px;margin:auto}.widget-header{display:flex;justify-content:flex-end}.placeholder{color:var(--color-grey-300);text-align:center}.placeholder .version{font-size:3em;margin:24px;line-height:1em}.placeholder ::ng-deep .clr-i-outline{fill:var(--color-grey-200)}vdr-dashboard-widget{margin-bottom:24px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.dashboard-row{padding:0;border-width:1;margin-bottom:6px;transition:padding .2s,margin .2s}.dashboard-row.cdk-drop-list-dragging,.dashboard-row.cdk-drop-list-receiving{border:1px dashed var(--color-component-border-200);padding:6px}.dashboard-row.cdk-drop-list-dragging .dashboard-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
|
|
157
157
|
}], ctorParameters: function () { return [{ type: i1.DashboardWidgetService }, { type: i1.LocalStorageService }, { type: i0.ChangeDetectorRef }, { type: i1.DataService }]; } });
|
|
158
158
|
|
|
159
159
|
const dashboardRoutes = [
|
|
@@ -185,7 +185,7 @@ class LatestOrdersWidgetComponent {
|
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
LatestOrdersWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: LatestOrdersWidgetComponent, deps: [{ token: i1.DataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
188
|
-
LatestOrdersWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: LatestOrdersWidgetComponent, selector: "vdr-latest-orders-widget", ngImport: i0, template: "<vdr-data-table [items]=\"latestOrders$ | async\">\r\n <ng-template let-order=\"item\">\r\n <td class=\"left align-middle\">\r\n {{ order.code }}\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\r\n </td>\r\n <td class=\"left align-middle\">{{ order.total | localeCurrency: order.currencyCode }}</td>\r\n <td class=\"left align-middle\">{{ order.orderPlacedAt | timeAgo }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"shopping-cart\"\r\n [label]=\"'common.open' | translate\"\r\n [linkTo]=\"['/orders/', order.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n", styles: ["vdr-data-table ::ng-deep table{margin-top:0}\n"], components: [{ type: i1.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "
|
|
188
|
+
LatestOrdersWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: LatestOrdersWidgetComponent, selector: "vdr-latest-orders-widget", ngImport: i0, template: "<vdr-data-table [items]=\"latestOrders$ | async\">\r\n <ng-template let-order=\"item\">\r\n <td class=\"left align-middle\">\r\n {{ order.code }}\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\r\n </td>\r\n <td class=\"left align-middle\">{{ order.total | localeCurrency: order.currencyCode }}</td>\r\n <td class=\"left align-middle\">{{ order.orderPlacedAt | timeAgo }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"shopping-cart\"\r\n [label]=\"'common.open' | translate\"\r\n [linkTo]=\"['/orders/', order.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n", styles: ["vdr-data-table ::ng-deep table{margin-top:0}\n"], components: [{ type: i1.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "selectionManager", "allSelected", "isRowSelectedFn"], outputs: ["pageChange", "itemsPerPageChange", "allSelectChange", "rowSelectChange"] }, { type: i1.OrderStateLabelComponent, selector: "vdr-order-state-label", inputs: ["state"] }, { type: i1.CustomerLabelComponent, selector: "vdr-customer-label", inputs: ["customer"] }, { type: i1.TableRowActionComponent, selector: "vdr-table-row-action", inputs: ["linkTo", "label", "iconShape", "disabled"] }], pipes: { "async": i2.AsyncPipe, "localeCurrency": i1.LocaleCurrencyPipe, "timeAgo": i1.TimeAgoPipe, "translate": i3.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
189
189
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: LatestOrdersWidgetComponent, decorators: [{
|
|
190
190
|
type: Component,
|
|
191
191
|
args: [{ selector: 'vdr-latest-orders-widget', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-data-table [items]=\"latestOrders$ | async\">\r\n <ng-template let-order=\"item\">\r\n <td class=\"left align-middle\">\r\n {{ order.code }}\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\r\n </td>\r\n <td class=\"left align-middle\">{{ order.total | localeCurrency: order.currencyCode }}</td>\r\n <td class=\"left align-middle\">{{ order.orderPlacedAt | timeAgo }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"shopping-cart\"\r\n [label]=\"'common.open' | translate\"\r\n [linkTo]=\"['/orders/', order.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n", styles: ["vdr-data-table ::ng-deep table{margin-top:0}\n"] }]
|
|
@@ -235,10 +235,10 @@ class OrderSummaryWidgetComponent {
|
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
237
|
OrderSummaryWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: OrderSummaryWidgetComponent, deps: [{ token: i1.DataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
238
|
-
OrderSummaryWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: OrderSummaryWidgetComponent, selector: "vdr-order-summary-widget", ngImport: i0, template: "<div class=\"stats\">\r\n <div class=\"stat\">\r\n <div class=\"stat-figure\">{{ totalOrderCount$ | async }}</div>\r\n <div class=\"stat-label\">{{ 'dashboard.total-orders' | translate }}</div>\r\n </div>\r\n <div class=\"stat\">\r\n <div class=\"stat-figure\">\r\n {{ totalOrderValue$ | async | currency: (currencyCode$ | async) || undefined }}\r\n </div>\r\n <div class=\"stat-label\">{{ 'dashboard.total-order-value' | translate }}</div>\r\n </div>\r\n</div>\r\n<div class=\"footer\">\r\n <div class=\"btn-group btn-outline-primary btn-sm\" *ngIf=\"selection$ | async as selection\">\r\n <button class=\"btn\" [class.btn-primary]=\"selection.date === today\" (click)=\"selection$.next({timeframe: 'day', date: today})\">\r\n {{ 'dashboard.today' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.date === yesterday\" (click)=\"selection$.next({timeframe: 'day', date: yesterday})\">\r\n {{ 'dashboard.yesterday' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'week'\" (click)=\"selection$.next({timeframe: 'week'})\">\r\n {{ 'dashboard.thisWeek' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'month'\" (click)=\"selection$.next({timeframe: 'month'})\">\r\n {{ 'dashboard.thisMonth' | translate }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"date-range p5\" *ngIf=\"dateRange$ | async as range\">\r\n {{ range.start | localeDate }} - {{ range.end | localeDate }}\r\n </div>\r\n</div>\r\n", styles: [".stats{display:flex;justify-content:space-evenly}.stat{text-align:center}.stat-figure{font-size:2rem;line-height:3rem}.stat-label{text-transform:uppercase}.date-range{margin-top:0}.footer{margin-top:24px;display:flex;flex-direction:column;justify-content:space-between}
|
|
238
|
+
OrderSummaryWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: OrderSummaryWidgetComponent, selector: "vdr-order-summary-widget", ngImport: i0, template: "<div class=\"stats\">\r\n <div class=\"stat\">\r\n <div class=\"stat-figure\">{{ totalOrderCount$ | async }}</div>\r\n <div class=\"stat-label\">{{ 'dashboard.total-orders' | translate }}</div>\r\n </div>\r\n <div class=\"stat\">\r\n <div class=\"stat-figure\">\r\n {{ totalOrderValue$ | async | currency: (currencyCode$ | async) || undefined }}\r\n </div>\r\n <div class=\"stat-label\">{{ 'dashboard.total-order-value' | translate }}</div>\r\n </div>\r\n</div>\r\n<div class=\"footer\">\r\n <div class=\"btn-group btn-outline-primary btn-sm\" *ngIf=\"selection$ | async as selection\">\r\n <button class=\"btn\" [class.btn-primary]=\"selection.date === today\" (click)=\"selection$.next({timeframe: 'day', date: today})\">\r\n {{ 'dashboard.today' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.date === yesterday\" (click)=\"selection$.next({timeframe: 'day', date: yesterday})\">\r\n {{ 'dashboard.yesterday' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'week'\" (click)=\"selection$.next({timeframe: 'week'})\">\r\n {{ 'dashboard.thisWeek' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'month'\" (click)=\"selection$.next({timeframe: 'month'})\">\r\n {{ 'dashboard.thisMonth' | translate }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"date-range p5\" *ngIf=\"dateRange$ | async as range\">\r\n {{ range.start | localeDate }} - {{ range.end | localeDate }}\r\n </div>\r\n</div>\r\n", styles: [".stats{display:flex;justify-content:space-evenly}.stat{text-align:center}.stat-figure{font-size:2rem;line-height:3rem}.stat-label{text-transform:uppercase}.date-range{margin-top:0}.footer{margin-top:24px;display:flex;flex-direction:column;justify-content:space-between}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i2.AsyncPipe, "translate": i3.TranslatePipe, "currency": i2.CurrencyPipe, "localeDate": i1.LocaleDatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
239
239
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: OrderSummaryWidgetComponent, decorators: [{
|
|
240
240
|
type: Component,
|
|
241
|
-
args: [{ selector: 'vdr-order-summary-widget', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"stats\">\r\n <div class=\"stat\">\r\n <div class=\"stat-figure\">{{ totalOrderCount$ | async }}</div>\r\n <div class=\"stat-label\">{{ 'dashboard.total-orders' | translate }}</div>\r\n </div>\r\n <div class=\"stat\">\r\n <div class=\"stat-figure\">\r\n {{ totalOrderValue$ | async | currency: (currencyCode$ | async) || undefined }}\r\n </div>\r\n <div class=\"stat-label\">{{ 'dashboard.total-order-value' | translate }}</div>\r\n </div>\r\n</div>\r\n<div class=\"footer\">\r\n <div class=\"btn-group btn-outline-primary btn-sm\" *ngIf=\"selection$ | async as selection\">\r\n <button class=\"btn\" [class.btn-primary]=\"selection.date === today\" (click)=\"selection$.next({timeframe: 'day', date: today})\">\r\n {{ 'dashboard.today' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.date === yesterday\" (click)=\"selection$.next({timeframe: 'day', date: yesterday})\">\r\n {{ 'dashboard.yesterday' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'week'\" (click)=\"selection$.next({timeframe: 'week'})\">\r\n {{ 'dashboard.thisWeek' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'month'\" (click)=\"selection$.next({timeframe: 'month'})\">\r\n {{ 'dashboard.thisMonth' | translate }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"date-range p5\" *ngIf=\"dateRange$ | async as range\">\r\n {{ range.start | localeDate }} - {{ range.end | localeDate }}\r\n </div>\r\n</div>\r\n", styles: [".stats{display:flex;justify-content:space-evenly}.stat{text-align:center}.stat-figure{font-size:2rem;line-height:3rem}.stat-label{text-transform:uppercase}.date-range{margin-top:0}.footer{margin-top:24px;display:flex;flex-direction:column;justify-content:space-between}
|
|
241
|
+
args: [{ selector: 'vdr-order-summary-widget', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"stats\">\r\n <div class=\"stat\">\r\n <div class=\"stat-figure\">{{ totalOrderCount$ | async }}</div>\r\n <div class=\"stat-label\">{{ 'dashboard.total-orders' | translate }}</div>\r\n </div>\r\n <div class=\"stat\">\r\n <div class=\"stat-figure\">\r\n {{ totalOrderValue$ | async | currency: (currencyCode$ | async) || undefined }}\r\n </div>\r\n <div class=\"stat-label\">{{ 'dashboard.total-order-value' | translate }}</div>\r\n </div>\r\n</div>\r\n<div class=\"footer\">\r\n <div class=\"btn-group btn-outline-primary btn-sm\" *ngIf=\"selection$ | async as selection\">\r\n <button class=\"btn\" [class.btn-primary]=\"selection.date === today\" (click)=\"selection$.next({timeframe: 'day', date: today})\">\r\n {{ 'dashboard.today' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.date === yesterday\" (click)=\"selection$.next({timeframe: 'day', date: yesterday})\">\r\n {{ 'dashboard.yesterday' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'week'\" (click)=\"selection$.next({timeframe: 'week'})\">\r\n {{ 'dashboard.thisWeek' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'month'\" (click)=\"selection$.next({timeframe: 'month'})\">\r\n {{ 'dashboard.thisMonth' | translate }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"date-range p5\" *ngIf=\"dateRange$ | async as range\">\r\n {{ range.start | localeDate }} - {{ range.end | localeDate }}\r\n </div>\r\n</div>\r\n", styles: [".stats{display:flex;justify-content:space-evenly}.stat{text-align:center}.stat-figure{font-size:2rem;line-height:3rem}.stat-label{text-transform:uppercase}.date-range{margin-top:0}.footer{margin-top:24px;display:flex;flex-direction:column;justify-content:space-between}\n"] }]
|
|
242
242
|
}], ctorParameters: function () { return [{ type: i1.DataService }]; } });
|
|
243
243
|
class OrderSummaryWidgetModule {
|
|
244
244
|
}
|
|
@@ -334,7 +334,11 @@ const DEFAULT_WIDGETS = {
|
|
|
334
334
|
|
|
335
335
|
class DashboardModule {
|
|
336
336
|
constructor(dashboardWidgetService) {
|
|
337
|
-
Object.entries(DEFAULT_WIDGETS).map(([id, config]) =>
|
|
337
|
+
Object.entries(DEFAULT_WIDGETS).map(([id, config]) => {
|
|
338
|
+
if (!dashboardWidgetService.getWidgetById(id)) {
|
|
339
|
+
dashboardWidgetService.registerWidget(id, config);
|
|
340
|
+
}
|
|
341
|
+
});
|
|
338
342
|
if (dashboardWidgetService.getDefaultLayout().length === 0) {
|
|
339
343
|
dashboardWidgetService.setDefaultLayout(DEFAULT_DASHBOARD_WIDGET_LAYOUT);
|
|
340
344
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vendure-admin-ui-dashboard.mjs","sources":["../../src/lib/dashboard/src/components/dashboard-widget/dashboard-widget.component.ts","../../src/lib/dashboard/src/components/dashboard-widget/dashboard-widget.component.html","../../src/lib/dashboard/src/components/dashboard/dashboard.component.ts","../../src/lib/dashboard/src/components/dashboard/dashboard.component.html","../../src/lib/dashboard/src/dashboard.routes.ts","../../src/lib/dashboard/src/widgets/latest-orders-widget/latest-orders-widget.component.ts","../../src/lib/dashboard/src/widgets/latest-orders-widget/latest-orders-widget.component.html","../../src/lib/dashboard/src/widgets/order-summary-widget/order-summary-widget.component.ts","../../src/lib/dashboard/src/widgets/order-summary-widget/order-summary-widget.component.html","../../src/lib/dashboard/src/widgets/test-widget/test-widget.component.ts","../../src/lib/dashboard/src/widgets/test-widget/test-widget.component.html","../../src/lib/dashboard/src/widgets/welcome-widget/welcome-widget.component.ts","../../src/lib/dashboard/src/widgets/welcome-widget/welcome-widget.component.html","../../src/lib/dashboard/src/default-widgets.ts","../../src/lib/dashboard/src/dashboard.module.ts","../../src/lib/dashboard/src/public_api.ts","../../src/lib/dashboard/src/vendure-admin-ui-dashboard.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { DashboardWidgetConfig } from '@vendure/admin-ui/core';\n\n@Component({\n selector: 'vdr-dashboard-widget',\n templateUrl: './dashboard-widget.component.html',\n styleUrls: ['./dashboard-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DashboardWidgetComponent implements AfterViewInit, OnDestroy {\n @Input() widgetConfig: DashboardWidgetConfig;\n\n @ViewChild('portal', { read: ViewContainerRef })\n private portal: ViewContainerRef;\n\n private componentRef: ComponentRef<any>;\n\n constructor(private componentFactoryResolver: ComponentFactoryResolver) {}\n\n ngAfterViewInit(): void {\n this.loadWidget();\n }\n\n private async loadWidget() {\n const loadComponentResult = this.widgetConfig.loadComponent();\n const componentType =\n loadComponentResult instanceof Promise ? await loadComponentResult : loadComponentResult;\n this.componentRef = this.portal.createComponent(\n this.componentFactoryResolver.resolveComponentFactory(componentType),\n );\n this.componentRef.changeDetectorRef.markForCheck();\n }\n\n ngOnDestroy() {\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n }\n}\n","<div class=\"card\">\r\n <div class=\"card-header\">\r\n <div class=\"title\">\r\n <ng-container *ngIf=\"widgetConfig.title as title\">{{ title | translate }}</ng-container>\r\n </div>\r\n <div class=\"controls\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <ng-template #portal></ng-template>\r\n </div>\r\n</div>\r\n","import { CdkDragDrop } from '@angular/cdk/drag-drop';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport {\r\n DashboardWidgetConfig,\r\n DashboardWidgetService,\r\n DashboardWidgetWidth,\r\n DataService,\r\n LocalStorageService,\r\n WidgetLayout,\r\n WidgetLayoutDefinition,\r\n} from '@vendure/admin-ui/core';\r\nimport { assertNever } from '@vendure/common/lib/shared-utils';\r\nimport { Observable } from 'rxjs';\r\nimport { map, tap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-dashboard',\r\n templateUrl: './dashboard.component.html',\r\n styleUrls: ['./dashboard.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DashboardComponent implements OnInit {\r\n widgetLayout: WidgetLayout | undefined;\r\n availableWidgetIds$: Observable<string[]>;\r\n private readonly deletionMarker = '__delete__';\r\n\r\n constructor(\r\n private dashboardWidgetService: DashboardWidgetService,\r\n private localStorageService: LocalStorageService,\r\n private changedDetectorRef: ChangeDetectorRef,\r\n private dataService: DataService,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.availableWidgetIds$ = this.dataService.client.userStatus().stream$.pipe(\r\n map(({ userStatus }) => userStatus.permissions),\r\n map(permissions => this.dashboardWidgetService.getAvailableIds(permissions)),\r\n tap(ids => (this.widgetLayout = this.initLayout(ids))),\r\n );\r\n }\r\n\r\n getClassForWidth(width: DashboardWidgetWidth): string {\r\n switch (width) {\r\n case 3:\r\n return `clr-col-12 clr-col-sm-6 clr-col-lg-3`;\r\n case 4:\r\n return `clr-col-12 clr-col-sm-6 clr-col-lg-4`;\r\n case 6:\r\n return `clr-col-12 clr-col-lg-6`;\r\n case 8:\r\n return `clr-col-12 clr-col-lg-8`;\r\n case 12:\r\n return `clr-col-12`;\r\n default:\r\n assertNever(width);\r\n }\r\n }\r\n\r\n getSupportedWidths(config: DashboardWidgetConfig): DashboardWidgetWidth[] {\r\n return config.supportedWidths || [3, 4, 6, 8, 12];\r\n }\r\n\r\n setWidgetWidth(widget: WidgetLayout[number][number], width: DashboardWidgetWidth) {\r\n widget.width = width;\r\n this.recalculateLayout();\r\n }\r\n\r\n trackRow(index: number, row: WidgetLayout[number]) {\r\n const id = row.map(item => `${item.id}:${item.width}`).join('|');\r\n return id;\r\n }\r\n\r\n trackRowItem(index: number, item: WidgetLayout[number][number]) {\r\n return item.config;\r\n }\r\n\r\n addWidget(id: string) {\r\n const config = this.dashboardWidgetService.getWidgetById(id);\r\n if (config) {\r\n const width = this.getSupportedWidths(config)[0];\r\n const widget: WidgetLayout[number][number] = {\r\n id,\r\n config,\r\n width,\r\n };\r\n let targetRow: WidgetLayout[number];\r\n if (this.widgetLayout && this.widgetLayout.length) {\r\n targetRow = this.widgetLayout[this.widgetLayout.length - 1];\r\n } else {\r\n targetRow = [];\r\n this.widgetLayout?.push(targetRow);\r\n }\r\n targetRow.push(widget);\r\n this.recalculateLayout();\r\n }\r\n }\r\n\r\n removeWidget(widget: WidgetLayout[number][number]) {\r\n widget.id = this.deletionMarker;\r\n this.recalculateLayout();\r\n }\r\n\r\n drop(event: CdkDragDrop<{ index: number }>) {\r\n const { currentIndex, previousIndex, previousContainer, container } = event;\r\n if (previousIndex === currentIndex && previousContainer.data.index === container.data.index) {\r\n // Nothing changed\r\n return;\r\n }\r\n if (this.widgetLayout) {\r\n const previousLayoutRow = this.widgetLayout[previousContainer.data.index];\r\n const newLayoutRow = this.widgetLayout[container.data.index];\r\n\r\n previousLayoutRow.splice(previousIndex, 1);\r\n newLayoutRow.splice(currentIndex, 0, event.item.data);\r\n this.recalculateLayout();\r\n }\r\n }\r\n\r\n private initLayout(availableIds: string[]): WidgetLayout {\r\n const savedLayoutDef = this.localStorageService.get('dashboardWidgetLayout');\r\n let layoutDef: WidgetLayoutDefinition | undefined;\r\n if (savedLayoutDef) {\r\n // validate all the IDs from the saved layout are still available\r\n layoutDef = savedLayoutDef.filter(item => availableIds.includes(item.id));\r\n }\r\n return this.dashboardWidgetService.getWidgetLayout(layoutDef);\r\n }\r\n\r\n private recalculateLayout() {\r\n if (this.widgetLayout) {\r\n const flattened = this.widgetLayout\r\n .reduce((flat, row) => [...flat, ...row], [])\r\n .filter(item => item.id !== this.deletionMarker);\r\n const newLayoutDef: WidgetLayoutDefinition = flattened.map(item => ({\r\n id: item.id,\r\n width: item.width,\r\n }));\r\n this.widgetLayout = this.dashboardWidgetService.getWidgetLayout(newLayoutDef);\r\n this.localStorageService.set('dashboardWidgetLayout', newLayoutDef);\r\n setTimeout(() => this.changedDetectorRef.markForCheck());\r\n }\r\n }\r\n}\r\n","<div class=\"widget-header\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'dashboard.add-widget' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n *ngFor=\"let id of availableWidgetIds$ | async\"\r\n (click)=\"addWidget(id)\"\r\n >\r\n {{ id }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n</div>\r\n<div cdkDropListGroup>\r\n <div\r\n class=\"clr-row dashboard-row\"\r\n *ngFor=\"let row of widgetLayout; index as rowIndex; trackBy: trackRow\"\r\n cdkDropList\r\n (cdkDropListDropped)=\"drop($event)\"\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListData]=\"{ index: rowIndex }\"\r\n >\r\n <div\r\n *ngFor=\"let widget of row; trackBy: trackRowItem\"\r\n class=\"dashboard-item\"\r\n [ngClass]=\"getClassForWidth(widget.width)\"\r\n cdkDrag\r\n [cdkDragData]=\"widget\"\r\n >\r\n <vdr-dashboard-widget\r\n *vdrIfPermissions=\"widget.config.requiresPermissions || null\"\r\n [widgetConfig]=\"widget.config\"\r\n >\r\n <div class=\"flex\">\r\n <div class=\"drag-handle\" cdkDragHandle>\r\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\r\n </div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <h4 class=\"dropdown-header\">{{ 'dashboard.widget-resize' | translate }}</h4>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"width === widget.width\"\r\n *ngFor=\"let width of getSupportedWidths(widget.config)\"\r\n (click)=\"setWidgetWidth(widget, width)\"\r\n >\r\n {{ 'dashboard.widget-width' | translate: { width: width } }}\r\n </button>\r\n <div class=\"dropdown-divider\" role=\"separator\"></div>\r\n <button class=\"button\" vdrDropdownItem (click)=\"removeWidget(widget)\">\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'dashboard.remove-widget' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-dashboard-widget>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Routes } from '@angular/router';\r\n\r\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\r\n\r\nexport const dashboardRoutes: Routes = [\r\n {\r\n path: '',\r\n component: DashboardComponent,\r\n pathMatch: 'full',\r\n },\r\n];\r\n","import { ChangeDetectionStrategy, Component, NgModule, OnInit } from '@angular/core';\r\nimport {\r\n CoreModule,\r\n DataService,\r\n GetOrderListQuery,\r\n ItemOf,\r\n SharedModule,\r\n SortOrder,\r\n} from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'vdr-latest-orders-widget',\r\n templateUrl: './latest-orders-widget.component.html',\r\n styleUrls: ['./latest-orders-widget.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class LatestOrdersWidgetComponent implements OnInit {\r\n latestOrders$: Observable<Array<ItemOf<GetOrderListQuery, 'orders'>>>;\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n this.latestOrders$ = this.dataService.order\r\n .getOrders({\r\n take: 10,\r\n filter: {\r\n active: { eq: false },\r\n state: { notEq: 'Cancelled' },\r\n },\r\n sort: {\r\n orderPlacedAt: SortOrder.DESC,\r\n },\r\n })\r\n .refetchOnChannelChange()\r\n .mapStream(data => data.orders.items);\r\n }\r\n}\r\n\r\n@NgModule({\r\n imports: [CoreModule, SharedModule],\r\n declarations: [LatestOrdersWidgetComponent],\r\n})\r\nexport class LatestOrdersWidgetModule {}\r\n","<vdr-data-table [items]=\"latestOrders$ | async\">\r\n <ng-template let-order=\"item\">\r\n <td class=\"left align-middle\">\r\n {{ order.code }}\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\r\n </td>\r\n <td class=\"left align-middle\">{{ order.total | localeCurrency: order.currencyCode }}</td>\r\n <td class=\"left align-middle\">{{ order.orderPlacedAt | timeAgo }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"shopping-cart\"\r\n [label]=\"'common.open' | translate\"\r\n [linkTo]=\"['/orders/', order.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, Component, NgModule, OnInit } from '@angular/core';\r\nimport { CoreModule, DataService } from '@vendure/admin-ui/core';\r\nimport dayjs from 'dayjs';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { distinctUntilChanged, map, shareReplay, switchMap } from 'rxjs/operators';\r\n\r\nexport type Timeframe = 'day' | 'week' | 'month';\r\n\r\n@Component({\r\n selector: 'vdr-order-summary-widget',\r\n templateUrl: './order-summary-widget.component.html',\r\n styleUrls: ['./order-summary-widget.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderSummaryWidgetComponent implements OnInit {\r\n today = new Date();\r\n yesterday = new Date(new Date().setDate(this.today.getDate() - 1));\r\n totalOrderCount$: Observable<number>;\r\n totalOrderValue$: Observable<number>;\r\n currencyCode$: Observable<string | undefined>;\r\n selection$ = new BehaviorSubject<{ timeframe: Timeframe; date?: Date }>({\r\n timeframe: 'day',\r\n date: this.today,\r\n });\r\n dateRange$: Observable<{ start: Date; end: Date }>;\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n this.dateRange$ = this.selection$.pipe(\r\n distinctUntilChanged(),\r\n map(selection => {\r\n return {\r\n start: dayjs(selection.date).startOf(selection.timeframe).toDate(),\r\n end: dayjs(selection.date).endOf(selection.timeframe).toDate(),\r\n };\r\n }),\r\n shareReplay(1),\r\n );\r\n const orderSummary$ = this.dateRange$.pipe(\r\n switchMap(({ start, end }) => {\r\n return this.dataService.order\r\n .getOrderSummary(start, end)\r\n .refetchOnChannelChange()\r\n .mapStream(data => data.orders);\r\n }),\r\n shareReplay(1),\r\n );\r\n this.totalOrderCount$ = orderSummary$.pipe(map(res => res.totalItems));\r\n this.totalOrderValue$ = orderSummary$.pipe(\r\n map(res => res.items.reduce((total, order) => total + order.total, 0) / 100),\r\n );\r\n this.currencyCode$ = this.dataService.settings\r\n .getActiveChannel()\r\n .refetchOnChannelChange()\r\n .mapStream(data => data.activeChannel.currencyCode || undefined);\r\n }\r\n}\r\n\r\n@NgModule({\r\n imports: [CoreModule],\r\n declarations: [OrderSummaryWidgetComponent],\r\n})\r\nexport class OrderSummaryWidgetModule {}\r\n","<div class=\"stats\">\r\n <div class=\"stat\">\r\n <div class=\"stat-figure\">{{ totalOrderCount$ | async }}</div>\r\n <div class=\"stat-label\">{{ 'dashboard.total-orders' | translate }}</div>\r\n </div>\r\n <div class=\"stat\">\r\n <div class=\"stat-figure\">\r\n {{ totalOrderValue$ | async | currency: (currencyCode$ | async) || undefined }}\r\n </div>\r\n <div class=\"stat-label\">{{ 'dashboard.total-order-value' | translate }}</div>\r\n </div>\r\n</div>\r\n<div class=\"footer\">\r\n <div class=\"btn-group btn-outline-primary btn-sm\" *ngIf=\"selection$ | async as selection\">\r\n <button class=\"btn\" [class.btn-primary]=\"selection.date === today\" (click)=\"selection$.next({timeframe: 'day', date: today})\">\r\n {{ 'dashboard.today' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.date === yesterday\" (click)=\"selection$.next({timeframe: 'day', date: yesterday})\">\r\n {{ 'dashboard.yesterday' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'week'\" (click)=\"selection$.next({timeframe: 'week'})\">\r\n {{ 'dashboard.thisWeek' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'month'\" (click)=\"selection$.next({timeframe: 'month'})\">\r\n {{ 'dashboard.thisMonth' | translate }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"date-range p5\" *ngIf=\"dateRange$ | async as range\">\r\n {{ range.start | localeDate }} - {{ range.end | localeDate }}\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, NgModule } from '@angular/core';\n\n@Component({\n selector: 'vdr-test-widget',\n templateUrl: './test-widget.component.html',\n styleUrls: ['./test-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TestWidgetComponent {}\n\n@NgModule({\n declarations: [TestWidgetComponent],\n})\nexport class TestWidgetModule {}\n","<p>This is a test widget!</p>\r\n","import { ChangeDetectionStrategy, Component, NgModule, OnInit } from '@angular/core';\r\nimport {\r\n ADMIN_UI_VERSION,\r\n CoreModule,\r\n DataService,\r\n GetActiveAdministratorQuery,\r\n getAppConfig,\r\n} from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'vdr-welcome-widget',\r\n templateUrl: './welcome-widget.component.html',\r\n styleUrls: ['./welcome-widget.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class WelcomeWidgetComponent implements OnInit {\r\n version = ADMIN_UI_VERSION;\r\n administrator$: Observable<GetActiveAdministratorQuery['activeAdministrator']>;\r\n brand = getAppConfig().brand;\r\n hideVendureBranding = getAppConfig().hideVendureBranding;\r\n hideVersion = getAppConfig().hideVersion;\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n this.administrator$ = this.dataService.administrator\r\n .getActiveAdministrator()\r\n .mapStream(data => data.activeAdministrator || null);\r\n }\r\n}\r\n\r\n@NgModule({\r\n imports: [CoreModule],\r\n declarations: [WelcomeWidgetComponent],\r\n})\r\nexport class WelcomeWidgetModule {}\r\n","<div *ngIf=\"administrator$ | async as administrator\">\r\n <h4 class=\"h4\">\r\n Welcome, {{ administrator.firstName }} {{ administrator.lastName }}<br />\r\n <small class=\"p5\">Last login: {{ administrator.user.lastLogin | timeAgo }}</small>\r\n </h4>\r\n\r\n <p class=\"p5\" *ngIf=\"!hideVendureBranding || !hideVersion\">\r\n {{ hideVendureBranding ? '' : 'Vendure' }} {{ hideVersion ? '' : ('Admin UI v' + version) }}\r\n </p>\r\n</div>\r\n<div class=\"placeholder\">\r\n <clr-icon shape=\"line-chart\" size=\"128\"></clr-icon>\r\n</div>\r\n","import { APP_INITIALIZER, FactoryProvider } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n DashboardWidgetConfig,\n DashboardWidgetService,\n Permission,\n WidgetLayoutDefinition,\n} from '@vendure/admin-ui/core';\n\nimport { LatestOrdersWidgetComponent } from './widgets/latest-orders-widget/latest-orders-widget.component';\nimport { OrderSummaryWidgetComponent } from './widgets/order-summary-widget/order-summary-widget.component';\nimport { TestWidgetComponent } from './widgets/test-widget/test-widget.component';\nimport { WelcomeWidgetComponent } from './widgets/welcome-widget/welcome-widget.component';\n\nexport const DEFAULT_DASHBOARD_WIDGET_LAYOUT: WidgetLayoutDefinition = [\n { id: 'welcome', width: 12 },\n { id: 'orderSummary', width: 6 },\n { id: 'latestOrders', width: 6 },\n];\n\nexport const DEFAULT_WIDGETS: { [id: string]: DashboardWidgetConfig } = {\n welcome: {\n loadComponent: () => WelcomeWidgetComponent,\n },\n orderSummary: {\n title: _('dashboard.orders-summary'),\n loadComponent: () => OrderSummaryWidgetComponent,\n requiresPermissions: [Permission.ReadOrder],\n },\n latestOrders: {\n title: _('dashboard.latest-orders'),\n loadComponent: () => LatestOrdersWidgetComponent,\n supportedWidths: [6, 8, 12],\n requiresPermissions: [Permission.ReadOrder],\n },\n testWidget: {\n title: 'Test Widget',\n loadComponent: () => TestWidgetComponent,\n },\n};\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DashboardWidgetService, SharedModule } from '@vendure/admin-ui/core';\n\nimport { DashboardWidgetComponent } from './components/dashboard-widget/dashboard-widget.component';\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\nimport { dashboardRoutes } from './dashboard.routes';\nimport { DEFAULT_DASHBOARD_WIDGET_LAYOUT, DEFAULT_WIDGETS } from './default-widgets';\n\n@NgModule({\n imports: [SharedModule, RouterModule.forChild(dashboardRoutes)],\n declarations: [DashboardComponent, DashboardWidgetComponent],\n})\nexport class DashboardModule {\n constructor(dashboardWidgetService: DashboardWidgetService) {\n Object.entries(DEFAULT_WIDGETS).map(([id, config]) =>\n dashboardWidgetService.registerWidget(id, config),\n );\n if (dashboardWidgetService.getDefaultLayout().length === 0) {\n dashboardWidgetService.setDefaultLayout(DEFAULT_DASHBOARD_WIDGET_LAYOUT);\n }\n }\n}\n","// This file was generated by the build-public-api.ts script\nexport * from './components/dashboard/dashboard.component';\nexport * from './components/dashboard-widget/dashboard-widget.component';\nexport * from './dashboard.module';\nexport * from './dashboard.routes';\nexport * from './default-widgets';\nexport * from './widgets/latest-orders-widget/latest-orders-widget.component';\nexport * from './widgets/order-summary-widget/order-summary-widget.component';\nexport * from './widgets/test-widget/test-widget.component';\nexport * from './widgets/welcome-widget/welcome-widget.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vendure-admin-ui-dashboard.mjs","sources":["../../src/lib/dashboard/src/components/dashboard-widget/dashboard-widget.component.ts","../../src/lib/dashboard/src/components/dashboard-widget/dashboard-widget.component.html","../../src/lib/dashboard/src/components/dashboard/dashboard.component.ts","../../src/lib/dashboard/src/components/dashboard/dashboard.component.html","../../src/lib/dashboard/src/dashboard.routes.ts","../../src/lib/dashboard/src/widgets/latest-orders-widget/latest-orders-widget.component.ts","../../src/lib/dashboard/src/widgets/latest-orders-widget/latest-orders-widget.component.html","../../src/lib/dashboard/src/widgets/order-summary-widget/order-summary-widget.component.ts","../../src/lib/dashboard/src/widgets/order-summary-widget/order-summary-widget.component.html","../../src/lib/dashboard/src/widgets/test-widget/test-widget.component.ts","../../src/lib/dashboard/src/widgets/test-widget/test-widget.component.html","../../src/lib/dashboard/src/widgets/welcome-widget/welcome-widget.component.ts","../../src/lib/dashboard/src/widgets/welcome-widget/welcome-widget.component.html","../../src/lib/dashboard/src/default-widgets.ts","../../src/lib/dashboard/src/dashboard.module.ts","../../src/lib/dashboard/src/public_api.ts","../../src/lib/dashboard/src/vendure-admin-ui-dashboard.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { DashboardWidgetConfig } from '@vendure/admin-ui/core';\n\n@Component({\n selector: 'vdr-dashboard-widget',\n templateUrl: './dashboard-widget.component.html',\n styleUrls: ['./dashboard-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DashboardWidgetComponent implements AfterViewInit, OnDestroy {\n @Input() widgetConfig: DashboardWidgetConfig;\n\n @ViewChild('portal', { read: ViewContainerRef })\n private portal: ViewContainerRef;\n\n private componentRef: ComponentRef<any>;\n\n constructor(private componentFactoryResolver: ComponentFactoryResolver) {}\n\n ngAfterViewInit(): void {\n this.loadWidget();\n }\n\n private async loadWidget() {\n const loadComponentResult = this.widgetConfig.loadComponent();\n const componentType =\n loadComponentResult instanceof Promise ? await loadComponentResult : loadComponentResult;\n this.componentRef = this.portal.createComponent(\n this.componentFactoryResolver.resolveComponentFactory(componentType),\n );\n this.componentRef.changeDetectorRef.detectChanges();\n }\n\n ngOnDestroy() {\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n }\n}\n","<div class=\"card\">\r\n <div class=\"card-header\">\r\n <div class=\"title\">\r\n <ng-container *ngIf=\"widgetConfig.title as title\">{{ title | translate }}</ng-container>\r\n </div>\r\n <div class=\"controls\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <ng-template #portal></ng-template>\r\n </div>\r\n</div>\r\n","import { CdkDragDrop } from '@angular/cdk/drag-drop';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport {\r\n DashboardWidgetConfig,\r\n DashboardWidgetService,\r\n DashboardWidgetWidth,\r\n DataService,\r\n LocalStorageService,\r\n WidgetLayout,\r\n WidgetLayoutDefinition,\r\n} from '@vendure/admin-ui/core';\r\nimport { assertNever } from '@vendure/common/lib/shared-utils';\r\nimport { Observable } from 'rxjs';\r\nimport { map, tap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-dashboard',\r\n templateUrl: './dashboard.component.html',\r\n styleUrls: ['./dashboard.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DashboardComponent implements OnInit {\r\n widgetLayout: WidgetLayout | undefined;\r\n availableWidgetIds$: Observable<string[]>;\r\n private readonly deletionMarker = '__delete__';\r\n\r\n constructor(\r\n private dashboardWidgetService: DashboardWidgetService,\r\n private localStorageService: LocalStorageService,\r\n private changedDetectorRef: ChangeDetectorRef,\r\n private dataService: DataService,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.availableWidgetIds$ = this.dataService.client.userStatus().stream$.pipe(\r\n map(({ userStatus }) => userStatus.permissions),\r\n map(permissions => this.dashboardWidgetService.getAvailableIds(permissions)),\r\n tap(ids => (this.widgetLayout = this.initLayout(ids))),\r\n );\r\n }\r\n\r\n getClassForWidth(width: DashboardWidgetWidth): string {\r\n switch (width) {\r\n case 3:\r\n return `clr-col-12 clr-col-sm-6 clr-col-lg-3`;\r\n case 4:\r\n return `clr-col-12 clr-col-sm-6 clr-col-lg-4`;\r\n case 6:\r\n return `clr-col-12 clr-col-lg-6`;\r\n case 8:\r\n return `clr-col-12 clr-col-lg-8`;\r\n case 12:\r\n return `clr-col-12`;\r\n default:\r\n assertNever(width);\r\n }\r\n }\r\n\r\n getSupportedWidths(config: DashboardWidgetConfig): DashboardWidgetWidth[] {\r\n return config.supportedWidths || [3, 4, 6, 8, 12];\r\n }\r\n\r\n setWidgetWidth(widget: WidgetLayout[number][number], width: DashboardWidgetWidth) {\r\n widget.width = width;\r\n this.recalculateLayout();\r\n }\r\n\r\n trackRow(index: number, row: WidgetLayout[number]) {\r\n const id = row.map(item => `${item.id}:${item.width}`).join('|');\r\n return id;\r\n }\r\n\r\n trackRowItem(index: number, item: WidgetLayout[number][number]) {\r\n return item.config;\r\n }\r\n\r\n addWidget(id: string) {\r\n const config = this.dashboardWidgetService.getWidgetById(id);\r\n if (config) {\r\n const width = this.getSupportedWidths(config)[0];\r\n const widget: WidgetLayout[number][number] = {\r\n id,\r\n config,\r\n width,\r\n };\r\n let targetRow: WidgetLayout[number];\r\n if (this.widgetLayout && this.widgetLayout.length) {\r\n targetRow = this.widgetLayout[this.widgetLayout.length - 1];\r\n } else {\r\n targetRow = [];\r\n this.widgetLayout?.push(targetRow);\r\n }\r\n targetRow.push(widget);\r\n this.recalculateLayout();\r\n }\r\n }\r\n\r\n removeWidget(widget: WidgetLayout[number][number]) {\r\n widget.id = this.deletionMarker;\r\n this.recalculateLayout();\r\n }\r\n\r\n drop(event: CdkDragDrop<{ index: number }>) {\r\n const { currentIndex, previousIndex, previousContainer, container } = event;\r\n if (previousIndex === currentIndex && previousContainer.data.index === container.data.index) {\r\n // Nothing changed\r\n return;\r\n }\r\n if (this.widgetLayout) {\r\n const previousLayoutRow = this.widgetLayout[previousContainer.data.index];\r\n const newLayoutRow = this.widgetLayout[container.data.index];\r\n\r\n previousLayoutRow.splice(previousIndex, 1);\r\n newLayoutRow.splice(currentIndex, 0, event.item.data);\r\n this.recalculateLayout();\r\n }\r\n }\r\n\r\n private initLayout(availableIds: string[]): WidgetLayout {\r\n const savedLayoutDef = this.localStorageService.get('dashboardWidgetLayout');\r\n let layoutDef: WidgetLayoutDefinition | undefined;\r\n if (savedLayoutDef) {\r\n // validate all the IDs from the saved layout are still available\r\n layoutDef = savedLayoutDef.filter(item => availableIds.includes(item.id));\r\n }\r\n return this.dashboardWidgetService.getWidgetLayout(layoutDef);\r\n }\r\n\r\n private recalculateLayout() {\r\n if (this.widgetLayout) {\r\n const flattened = this.widgetLayout\r\n .reduce((flat, row) => [...flat, ...row], [])\r\n .filter(item => item.id !== this.deletionMarker);\r\n const newLayoutDef: WidgetLayoutDefinition = flattened.map(item => ({\r\n id: item.id,\r\n width: item.width,\r\n }));\r\n this.widgetLayout = this.dashboardWidgetService.getWidgetLayout(newLayoutDef);\r\n this.localStorageService.set('dashboardWidgetLayout', newLayoutDef);\r\n setTimeout(() => this.changedDetectorRef.markForCheck());\r\n }\r\n }\r\n}\r\n","<div class=\"widget-header\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'dashboard.add-widget' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n *ngFor=\"let id of availableWidgetIds$ | async\"\r\n (click)=\"addWidget(id)\"\r\n >\r\n {{ id }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n</div>\r\n<div cdkDropListGroup>\r\n <div\r\n class=\"clr-row dashboard-row\"\r\n *ngFor=\"let row of widgetLayout; index as rowIndex; trackBy: trackRow\"\r\n cdkDropList\r\n (cdkDropListDropped)=\"drop($event)\"\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListData]=\"{ index: rowIndex }\"\r\n >\r\n <div\r\n *ngFor=\"let widget of row; trackBy: trackRowItem\"\r\n class=\"dashboard-item\"\r\n [ngClass]=\"getClassForWidth(widget.width)\"\r\n cdkDrag\r\n [cdkDragData]=\"widget\"\r\n >\r\n <vdr-dashboard-widget\r\n *vdrIfPermissions=\"widget.config.requiresPermissions || null\"\r\n [widgetConfig]=\"widget.config\"\r\n >\r\n <div class=\"flex\">\r\n <div class=\"drag-handle\" cdkDragHandle>\r\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\r\n </div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <h4 class=\"dropdown-header\">{{ 'dashboard.widget-resize' | translate }}</h4>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n [disabled]=\"width === widget.width\"\r\n *ngFor=\"let width of getSupportedWidths(widget.config)\"\r\n (click)=\"setWidgetWidth(widget, width)\"\r\n >\r\n {{ 'dashboard.widget-width' | translate: { width: width } }}\r\n </button>\r\n <div class=\"dropdown-divider\" role=\"separator\"></div>\r\n <button class=\"button\" vdrDropdownItem (click)=\"removeWidget(widget)\">\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'dashboard.remove-widget' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-dashboard-widget>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Routes } from '@angular/router';\r\n\r\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\r\n\r\nexport const dashboardRoutes: Routes = [\r\n {\r\n path: '',\r\n component: DashboardComponent,\r\n pathMatch: 'full',\r\n },\r\n];\r\n","import { ChangeDetectionStrategy, Component, NgModule, OnInit } from '@angular/core';\r\nimport {\r\n CoreModule,\r\n DataService,\r\n GetOrderListQuery,\r\n ItemOf,\r\n SharedModule,\r\n SortOrder,\r\n} from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'vdr-latest-orders-widget',\r\n templateUrl: './latest-orders-widget.component.html',\r\n styleUrls: ['./latest-orders-widget.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class LatestOrdersWidgetComponent implements OnInit {\r\n latestOrders$: Observable<Array<ItemOf<GetOrderListQuery, 'orders'>>>;\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n this.latestOrders$ = this.dataService.order\r\n .getOrders({\r\n take: 10,\r\n filter: {\r\n active: { eq: false },\r\n state: { notEq: 'Cancelled' },\r\n },\r\n sort: {\r\n orderPlacedAt: SortOrder.DESC,\r\n },\r\n })\r\n .refetchOnChannelChange()\r\n .mapStream(data => data.orders.items);\r\n }\r\n}\r\n\r\n@NgModule({\r\n imports: [CoreModule, SharedModule],\r\n declarations: [LatestOrdersWidgetComponent],\r\n})\r\nexport class LatestOrdersWidgetModule {}\r\n","<vdr-data-table [items]=\"latestOrders$ | async\">\r\n <ng-template let-order=\"item\">\r\n <td class=\"left align-middle\">\r\n {{ order.code }}\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\r\n </td>\r\n <td class=\"left align-middle\">{{ order.total | localeCurrency: order.currencyCode }}</td>\r\n <td class=\"left align-middle\">{{ order.orderPlacedAt | timeAgo }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"shopping-cart\"\r\n [label]=\"'common.open' | translate\"\r\n [linkTo]=\"['/orders/', order.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, Component, NgModule, OnInit } from '@angular/core';\r\nimport { CoreModule, DataService } from '@vendure/admin-ui/core';\r\nimport dayjs from 'dayjs';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { distinctUntilChanged, map, shareReplay, switchMap } from 'rxjs/operators';\r\n\r\nexport type Timeframe = 'day' | 'week' | 'month';\r\n\r\n@Component({\r\n selector: 'vdr-order-summary-widget',\r\n templateUrl: './order-summary-widget.component.html',\r\n styleUrls: ['./order-summary-widget.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderSummaryWidgetComponent implements OnInit {\r\n today = new Date();\r\n yesterday = new Date(new Date().setDate(this.today.getDate() - 1));\r\n totalOrderCount$: Observable<number>;\r\n totalOrderValue$: Observable<number>;\r\n currencyCode$: Observable<string | undefined>;\r\n selection$ = new BehaviorSubject<{ timeframe: Timeframe; date?: Date }>({\r\n timeframe: 'day',\r\n date: this.today,\r\n });\r\n dateRange$: Observable<{ start: Date; end: Date }>;\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n this.dateRange$ = this.selection$.pipe(\r\n distinctUntilChanged(),\r\n map(selection => {\r\n return {\r\n start: dayjs(selection.date).startOf(selection.timeframe).toDate(),\r\n end: dayjs(selection.date).endOf(selection.timeframe).toDate(),\r\n };\r\n }),\r\n shareReplay(1),\r\n );\r\n const orderSummary$ = this.dateRange$.pipe(\r\n switchMap(({ start, end }) => {\r\n return this.dataService.order\r\n .getOrderSummary(start, end)\r\n .refetchOnChannelChange()\r\n .mapStream(data => data.orders);\r\n }),\r\n shareReplay(1),\r\n );\r\n this.totalOrderCount$ = orderSummary$.pipe(map(res => res.totalItems));\r\n this.totalOrderValue$ = orderSummary$.pipe(\r\n map(res => res.items.reduce((total, order) => total + order.total, 0) / 100),\r\n );\r\n this.currencyCode$ = this.dataService.settings\r\n .getActiveChannel()\r\n .refetchOnChannelChange()\r\n .mapStream(data => data.activeChannel.currencyCode || undefined);\r\n }\r\n}\r\n\r\n@NgModule({\r\n imports: [CoreModule],\r\n declarations: [OrderSummaryWidgetComponent],\r\n})\r\nexport class OrderSummaryWidgetModule {}\r\n","<div class=\"stats\">\r\n <div class=\"stat\">\r\n <div class=\"stat-figure\">{{ totalOrderCount$ | async }}</div>\r\n <div class=\"stat-label\">{{ 'dashboard.total-orders' | translate }}</div>\r\n </div>\r\n <div class=\"stat\">\r\n <div class=\"stat-figure\">\r\n {{ totalOrderValue$ | async | currency: (currencyCode$ | async) || undefined }}\r\n </div>\r\n <div class=\"stat-label\">{{ 'dashboard.total-order-value' | translate }}</div>\r\n </div>\r\n</div>\r\n<div class=\"footer\">\r\n <div class=\"btn-group btn-outline-primary btn-sm\" *ngIf=\"selection$ | async as selection\">\r\n <button class=\"btn\" [class.btn-primary]=\"selection.date === today\" (click)=\"selection$.next({timeframe: 'day', date: today})\">\r\n {{ 'dashboard.today' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.date === yesterday\" (click)=\"selection$.next({timeframe: 'day', date: yesterday})\">\r\n {{ 'dashboard.yesterday' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'week'\" (click)=\"selection$.next({timeframe: 'week'})\">\r\n {{ 'dashboard.thisWeek' | translate }}\r\n </button>\r\n <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'month'\" (click)=\"selection$.next({timeframe: 'month'})\">\r\n {{ 'dashboard.thisMonth' | translate }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"date-range p5\" *ngIf=\"dateRange$ | async as range\">\r\n {{ range.start | localeDate }} - {{ range.end | localeDate }}\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, NgModule } from '@angular/core';\n\n@Component({\n selector: 'vdr-test-widget',\n templateUrl: './test-widget.component.html',\n styleUrls: ['./test-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TestWidgetComponent {}\n\n@NgModule({\n declarations: [TestWidgetComponent],\n})\nexport class TestWidgetModule {}\n","<p>This is a test widget!</p>\r\n","import { ChangeDetectionStrategy, Component, NgModule, OnInit } from '@angular/core';\r\nimport {\r\n ADMIN_UI_VERSION,\r\n CoreModule,\r\n DataService,\r\n GetActiveAdministratorQuery,\r\n getAppConfig,\r\n} from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'vdr-welcome-widget',\r\n templateUrl: './welcome-widget.component.html',\r\n styleUrls: ['./welcome-widget.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class WelcomeWidgetComponent implements OnInit {\r\n version = ADMIN_UI_VERSION;\r\n administrator$: Observable<GetActiveAdministratorQuery['activeAdministrator']>;\r\n brand = getAppConfig().brand;\r\n hideVendureBranding = getAppConfig().hideVendureBranding;\r\n hideVersion = getAppConfig().hideVersion;\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n this.administrator$ = this.dataService.administrator\r\n .getActiveAdministrator()\r\n .mapStream(data => data.activeAdministrator || null);\r\n }\r\n}\r\n\r\n@NgModule({\r\n imports: [CoreModule],\r\n declarations: [WelcomeWidgetComponent],\r\n})\r\nexport class WelcomeWidgetModule {}\r\n","<div *ngIf=\"administrator$ | async as administrator\">\r\n <h4 class=\"h4\">\r\n Welcome, {{ administrator.firstName }} {{ administrator.lastName }}<br />\r\n <small class=\"p5\">Last login: {{ administrator.user.lastLogin | timeAgo }}</small>\r\n </h4>\r\n\r\n <p class=\"p5\" *ngIf=\"!hideVendureBranding || !hideVersion\">\r\n {{ hideVendureBranding ? '' : 'Vendure' }} {{ hideVersion ? '' : ('Admin UI v' + version) }}\r\n </p>\r\n</div>\r\n<div class=\"placeholder\">\r\n <clr-icon shape=\"line-chart\" size=\"128\"></clr-icon>\r\n</div>\r\n","import { APP_INITIALIZER, FactoryProvider } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n DashboardWidgetConfig,\n DashboardWidgetService,\n Permission,\n WidgetLayoutDefinition,\n} from '@vendure/admin-ui/core';\n\nimport { LatestOrdersWidgetComponent } from './widgets/latest-orders-widget/latest-orders-widget.component';\nimport { OrderSummaryWidgetComponent } from './widgets/order-summary-widget/order-summary-widget.component';\nimport { TestWidgetComponent } from './widgets/test-widget/test-widget.component';\nimport { WelcomeWidgetComponent } from './widgets/welcome-widget/welcome-widget.component';\n\nexport const DEFAULT_DASHBOARD_WIDGET_LAYOUT: WidgetLayoutDefinition = [\n { id: 'welcome', width: 12 },\n { id: 'orderSummary', width: 6 },\n { id: 'latestOrders', width: 6 },\n];\n\nexport const DEFAULT_WIDGETS: { [id: string]: DashboardWidgetConfig } = {\n welcome: {\n loadComponent: () => WelcomeWidgetComponent,\n },\n orderSummary: {\n title: _('dashboard.orders-summary'),\n loadComponent: () => OrderSummaryWidgetComponent,\n requiresPermissions: [Permission.ReadOrder],\n },\n latestOrders: {\n title: _('dashboard.latest-orders'),\n loadComponent: () => LatestOrdersWidgetComponent,\n supportedWidths: [6, 8, 12],\n requiresPermissions: [Permission.ReadOrder],\n },\n testWidget: {\n title: 'Test Widget',\n loadComponent: () => TestWidgetComponent,\n },\n};\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { DashboardWidgetService, SharedModule } from '@vendure/admin-ui/core';\r\n\r\nimport { DashboardWidgetComponent } from './components/dashboard-widget/dashboard-widget.component';\r\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\r\nimport { dashboardRoutes } from './dashboard.routes';\r\nimport { DEFAULT_DASHBOARD_WIDGET_LAYOUT, DEFAULT_WIDGETS } from './default-widgets';\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild(dashboardRoutes)],\r\n declarations: [DashboardComponent, DashboardWidgetComponent],\r\n})\r\nexport class DashboardModule {\r\n constructor(dashboardWidgetService: DashboardWidgetService) {\r\n Object.entries(DEFAULT_WIDGETS).map(([id, config]) => {\r\n if (!dashboardWidgetService.getWidgetById(id)) {\r\n dashboardWidgetService.registerWidget(id, config);\r\n }\r\n });\r\n if (dashboardWidgetService.getDefaultLayout().length === 0) {\r\n dashboardWidgetService.setDefaultLayout(DEFAULT_DASHBOARD_WIDGET_LAYOUT);\r\n }\r\n }\r\n}\r\n","// This file was generated by the build-public-api.ts script\nexport * from './components/dashboard/dashboard.component';\nexport * from './components/dashboard-widget/dashboard-widget.component';\nexport * from './dashboard.module';\nexport * from './dashboard.routes';\nexport * from './default-widgets';\nexport * from './widgets/latest-orders-widget/latest-orders-widget.component';\nexport * from './widgets/order-summary-widget/order-summary-widget.component';\nexport * from './widgets/test-widget/test-widget.component';\nexport * from './widgets/welcome-widget/welcome-widget.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_"],"mappings":"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"}
|
|
@@ -57,10 +57,10 @@ class LoginComponent {
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
LoginComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: LoginComponent, deps: [{ token: i1.AuthService }, { token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
60
|
-
LoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: LoginComponent, selector: "vdr-login", ngImport: i0, template: "<div class=\"login-wrapper\">\r\n <form class=\"login\">\r\n <label class=\"title\"
|
|
60
|
+
LoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: LoginComponent, selector: "vdr-login", ngImport: i0, template: "<div class=\"login-wrapper\">\r\n <form class=\"login\">\r\n <label class=\"title\">\r\n <img src=\"assets/logo-300px.png\" />\r\n <span *ngIf=\"!hideVendureBranding\">vendure</span>\r\n </label>\r\n <div class=\"login-group\">\r\n <input\r\n class=\"username\"\r\n type=\"text\"\r\n name=\"username\"\r\n id=\"login_username\"\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"'common.username' | translate\"\r\n />\r\n <input\r\n class=\"password\"\r\n name=\"password\"\r\n type=\"password\"\r\n id=\"login_password\"\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"'common.password' | translate\"\r\n />\r\n <clr-alert [clrAlertType]=\"'danger'\" [clrAlertClosable]=\"false\" [class.visible]=\"errorMessage\" class=\"login-error\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ errorMessage }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n <clr-checkbox-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n id=\"rememberme\"\r\n name=\"rememberme\"\r\n [(ngModel)]=\"rememberMe\"\r\n />\r\n <label>{{ 'common.remember-me' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <button\r\n type=\"submit\"\r\n class=\"btn btn-primary\"\r\n (click)=\"logIn()\"\r\n [disabled]=\"!username || !password\"\r\n >\r\n {{ 'common.login' | translate }}\r\n </button>\r\n </div>\r\n <div class=\"version\">\r\n <span *ngIf=\"brand\">{{ brand }} <span *ngIf=\"!hideVendureBranding || !hideVersion\">-</span></span>\r\n <span *ngIf=\"!hideVendureBranding\">vendure</span>\r\n <span *ngIf=\"!hideVersion\">v{{ version }}</span>\r\n </div>\r\n </form>\r\n</div>\r\n", styles: [".login-wrapper{background-image:linear-gradient(135deg,var(--color-login-gradient-top),var(--color-login-gradient-bottom)),var(--login-page-bg);background-blend-mode:screen;background-repeat:repeat;background-size:auto;background-position:initial;justify-content:center}@media screen and (max-width: 768px){.login-wrapper{justify-content:center;background-color:transparent}.login-wrapper .login{margin:20px;padding:24px}}.login{margin:5vh 0;border-radius:6px;min-height:90vh;max-height:800px}.title{display:flex;flex-direction:column;align-items:center;text-align:center;margin-top:8vh}.title img{max-width:100%;width:150px}.title span{padding-top:12px;font-weight:700;color:var(--color-primary-500);font-size:38px}.version{flex:1;display:flex;align-items:flex-end;justify-content:center;color:var(--color-grey-300)}.version span+span{margin-left:5px}.login-error{max-height:0;overflow:hidden}.login-error.visible{max-height:46px;transition:max-height .2s;animation:shake .82s cubic-bezier(.36,.07,.19,.97) both;animation-delay:.2s;transform:translate(0);-webkit-backface-visibility:hidden;backface-visibility:hidden;perspective:1000px}@keyframes shake{10%,90%{transform:translate(-1px)}20%,80%{transform:translate(2px)}30%,50%,70%{transform:translate(-4px)}40%,60%{transform:translate(4px)}}\n"], components: [{ type: i3.ClrAlert, selector: "clr-alert", inputs: ["clrAlertSizeSmall", "clrAlertClosable", "clrAlertAppLevel", "clrCloseButtonAriaLabel", "clrAlertClosed", "clrAlertType", "clrAlertIcon"], outputs: ["clrAlertClosedChange"] }, { type: i3.ClrAlertItem, selector: "clr-alert-item" }, { type: i3.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }], directives: [{ type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i3.ClrLabel, selector: "label", inputs: ["for"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.ClrAlertText, selector: ".alert-text" }, { type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i3.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }], pipes: { "translate": i6.TranslatePipe } });
|
|
61
61
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: LoginComponent, decorators: [{
|
|
62
62
|
type: Component,
|
|
63
|
-
args: [{ selector: 'vdr-login', template: "<div class=\"login-wrapper\">\r\n <form class=\"login\">\r\n <label class=\"title\"
|
|
63
|
+
args: [{ selector: 'vdr-login', template: "<div class=\"login-wrapper\">\r\n <form class=\"login\">\r\n <label class=\"title\">\r\n <img src=\"assets/logo-300px.png\" />\r\n <span *ngIf=\"!hideVendureBranding\">vendure</span>\r\n </label>\r\n <div class=\"login-group\">\r\n <input\r\n class=\"username\"\r\n type=\"text\"\r\n name=\"username\"\r\n id=\"login_username\"\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"'common.username' | translate\"\r\n />\r\n <input\r\n class=\"password\"\r\n name=\"password\"\r\n type=\"password\"\r\n id=\"login_password\"\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"'common.password' | translate\"\r\n />\r\n <clr-alert [clrAlertType]=\"'danger'\" [clrAlertClosable]=\"false\" [class.visible]=\"errorMessage\" class=\"login-error\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ errorMessage }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n <clr-checkbox-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n id=\"rememberme\"\r\n name=\"rememberme\"\r\n [(ngModel)]=\"rememberMe\"\r\n />\r\n <label>{{ 'common.remember-me' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <button\r\n type=\"submit\"\r\n class=\"btn btn-primary\"\r\n (click)=\"logIn()\"\r\n [disabled]=\"!username || !password\"\r\n >\r\n {{ 'common.login' | translate }}\r\n </button>\r\n </div>\r\n <div class=\"version\">\r\n <span *ngIf=\"brand\">{{ brand }} <span *ngIf=\"!hideVendureBranding || !hideVersion\">-</span></span>\r\n <span *ngIf=\"!hideVendureBranding\">vendure</span>\r\n <span *ngIf=\"!hideVersion\">v{{ version }}</span>\r\n </div>\r\n </form>\r\n</div>\r\n", styles: [".login-wrapper{background-image:linear-gradient(135deg,var(--color-login-gradient-top),var(--color-login-gradient-bottom)),var(--login-page-bg);background-blend-mode:screen;background-repeat:repeat;background-size:auto;background-position:initial;justify-content:center}@media screen and (max-width: 768px){.login-wrapper{justify-content:center;background-color:transparent}.login-wrapper .login{margin:20px;padding:24px}}.login{margin:5vh 0;border-radius:6px;min-height:90vh;max-height:800px}.title{display:flex;flex-direction:column;align-items:center;text-align:center;margin-top:8vh}.title img{max-width:100%;width:150px}.title span{padding-top:12px;font-weight:700;color:var(--color-primary-500);font-size:38px}.version{flex:1;display:flex;align-items:flex-end;justify-content:center;color:var(--color-grey-300)}.version span+span{margin-left:5px}.login-error{max-height:0;overflow:hidden}.login-error.visible{max-height:46px;transition:max-height .2s;animation:shake .82s cubic-bezier(.36,.07,.19,.97) both;animation-delay:.2s;transform:translate(0);-webkit-backface-visibility:hidden;backface-visibility:hidden;perspective:1000px}@keyframes shake{10%,90%{transform:translate(-1px)}20%,80%{transform:translate(2px)}30%,50%,70%{transform:translate(-4px)}40%,60%{transform:translate(4px)}}\n"] }]
|
|
64
64
|
}], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i1$1.Router }]; } });
|
|
65
65
|
|
|
66
66
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vendure-admin-ui-login.mjs","sources":["../../src/lib/login/src/components/login/login.component.ts","../../src/lib/login/src/components/login/login.component.html","../../src/lib/login/src/providers/login.guard.ts","../../src/lib/login/src/login.routes.ts","../../src/lib/login/src/login.module.ts","../../src/lib/login/src/public_api.ts","../../src/lib/login/src/vendure-admin-ui-login.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { ADMIN_UI_VERSION, AuthService, AUTH_REDIRECT_PARAM, getAppConfig } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-login',\r\n templateUrl: './login.component.html',\r\n styleUrls: ['./login.component.scss'],\r\n})\r\nexport class LoginComponent {\r\n username = '';\r\n password = '';\r\n rememberMe = false;\r\n version = ADMIN_UI_VERSION;\r\n errorMessage: string | undefined;\r\n brand = getAppConfig().brand;\r\n hideVendureBranding = getAppConfig().hideVendureBranding;\r\n hideVersion = getAppConfig().hideVersion;\r\n\r\n constructor(private authService: AuthService, private router: Router) {}\r\n\r\n logIn(): void {\r\n this.errorMessage = undefined;\r\n this.authService.logIn(this.username, this.password, this.rememberMe).subscribe(result => {\r\n switch (result.__typename) {\r\n case 'CurrentUser':\r\n const redirect = this.getRedirectRoute();\r\n this.router.navigateByUrl(redirect ? redirect : '/');\r\n break;\r\n case 'InvalidCredentialsError':\r\n case 'NativeAuthStrategyError':\r\n this.errorMessage = result.message;\r\n break;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Attempts to read a redirect param from the current url and parse it into a\r\n * route from which the user was redirected after a 401 error.\r\n */\r\n private getRedirectRoute(): string | undefined {\r\n let redirectTo: string | undefined;\r\n const re = new RegExp(`${AUTH_REDIRECT_PARAM}=(.*)`);\r\n try {\r\n const redirectToParam = window.location.search.match(re);\r\n if (redirectToParam && 1 < redirectToParam.length) {\r\n redirectTo = atob(decodeURIComponent(redirectToParam[1]));\r\n }\r\n } catch (e: any) {\r\n // ignore\r\n }\r\n return redirectTo;\r\n }\r\n}\r\n","<div class=\"login-wrapper\">\r\n <form class=\"login\">\r\n <label class=\"title\"
|
|
1
|
+
{"version":3,"file":"vendure-admin-ui-login.mjs","sources":["../../src/lib/login/src/components/login/login.component.ts","../../src/lib/login/src/components/login/login.component.html","../../src/lib/login/src/providers/login.guard.ts","../../src/lib/login/src/login.routes.ts","../../src/lib/login/src/login.module.ts","../../src/lib/login/src/public_api.ts","../../src/lib/login/src/vendure-admin-ui-login.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { ADMIN_UI_VERSION, AuthService, AUTH_REDIRECT_PARAM, getAppConfig } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-login',\r\n templateUrl: './login.component.html',\r\n styleUrls: ['./login.component.scss'],\r\n})\r\nexport class LoginComponent {\r\n username = '';\r\n password = '';\r\n rememberMe = false;\r\n version = ADMIN_UI_VERSION;\r\n errorMessage: string | undefined;\r\n brand = getAppConfig().brand;\r\n hideVendureBranding = getAppConfig().hideVendureBranding;\r\n hideVersion = getAppConfig().hideVersion;\r\n\r\n constructor(private authService: AuthService, private router: Router) {}\r\n\r\n logIn(): void {\r\n this.errorMessage = undefined;\r\n this.authService.logIn(this.username, this.password, this.rememberMe).subscribe(result => {\r\n switch (result.__typename) {\r\n case 'CurrentUser':\r\n const redirect = this.getRedirectRoute();\r\n this.router.navigateByUrl(redirect ? redirect : '/');\r\n break;\r\n case 'InvalidCredentialsError':\r\n case 'NativeAuthStrategyError':\r\n this.errorMessage = result.message;\r\n break;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Attempts to read a redirect param from the current url and parse it into a\r\n * route from which the user was redirected after a 401 error.\r\n */\r\n private getRedirectRoute(): string | undefined {\r\n let redirectTo: string | undefined;\r\n const re = new RegExp(`${AUTH_REDIRECT_PARAM}=(.*)`);\r\n try {\r\n const redirectToParam = window.location.search.match(re);\r\n if (redirectToParam && 1 < redirectToParam.length) {\r\n redirectTo = atob(decodeURIComponent(redirectToParam[1]));\r\n }\r\n } catch (e: any) {\r\n // ignore\r\n }\r\n return redirectTo;\r\n }\r\n}\r\n","<div class=\"login-wrapper\">\r\n <form class=\"login\">\r\n <label class=\"title\">\r\n <img src=\"assets/logo-300px.png\" />\r\n <span *ngIf=\"!hideVendureBranding\">vendure</span>\r\n </label>\r\n <div class=\"login-group\">\r\n <input\r\n class=\"username\"\r\n type=\"text\"\r\n name=\"username\"\r\n id=\"login_username\"\r\n [(ngModel)]=\"username\"\r\n [placeholder]=\"'common.username' | translate\"\r\n />\r\n <input\r\n class=\"password\"\r\n name=\"password\"\r\n type=\"password\"\r\n id=\"login_password\"\r\n [(ngModel)]=\"password\"\r\n [placeholder]=\"'common.password' | translate\"\r\n />\r\n <clr-alert [clrAlertType]=\"'danger'\" [clrAlertClosable]=\"false\" [class.visible]=\"errorMessage\" class=\"login-error\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ errorMessage }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n <clr-checkbox-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrCheckbox\r\n id=\"rememberme\"\r\n name=\"rememberme\"\r\n [(ngModel)]=\"rememberMe\"\r\n />\r\n <label>{{ 'common.remember-me' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <button\r\n type=\"submit\"\r\n class=\"btn btn-primary\"\r\n (click)=\"logIn()\"\r\n [disabled]=\"!username || !password\"\r\n >\r\n {{ 'common.login' | translate }}\r\n </button>\r\n </div>\r\n <div class=\"version\">\r\n <span *ngIf=\"brand\">{{ brand }} <span *ngIf=\"!hideVendureBranding || !hideVersion\">-</span></span>\r\n <span *ngIf=\"!hideVendureBranding\">vendure</span>\r\n <span *ngIf=\"!hideVersion\">v{{ version }}</span>\r\n </div>\r\n </form>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router';\r\nimport { AuthService } from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n/**\r\n * This guard prevents loggen-in users from navigating to the login screen.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LoginGuard implements CanActivate {\r\n constructor(private router: Router, private authService: AuthService) {}\r\n\r\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {\r\n return this.authService.checkAuthenticatedStatus().pipe(\r\n map(authenticated => {\r\n if (authenticated) {\r\n this.router.navigate(['/']);\r\n }\r\n return !authenticated;\r\n }),\r\n );\r\n }\r\n}\r\n","import { Routes } from '@angular/router';\r\n\r\nimport { LoginComponent } from './components/login/login.component';\r\nimport { LoginGuard } from './providers/login.guard';\r\n\r\nexport const loginRoutes: Routes = [\r\n {\r\n path: '',\r\n component: LoginComponent,\r\n pathMatch: 'full',\r\n canActivate: [LoginGuard],\r\n },\r\n];\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { SharedModule } from '@vendure/admin-ui/core';\r\n\r\nimport { LoginComponent } from './components/login/login.component';\r\nimport { loginRoutes } from './login.routes';\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild(loginRoutes)],\r\n exports: [],\r\n declarations: [LoginComponent],\r\n})\r\nexport class LoginModule {}\r\n","// This file was generated by the build-public-api.ts script\nexport * from './components/login/login.component';\nexport * from './login.module';\nexport * from './login.routes';\nexport * from './providers/login.guard';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;MASa,cAAc;IAUvB,YAAoB,WAAwB,EAAU,MAAc;QAAhD,gBAAW,GAAX,WAAW,CAAa;QAAU,WAAM,GAAN,MAAM,CAAQ;QATpE,aAAQ,GAAG,EAAE,CAAC;QACd,aAAQ,GAAG,EAAE,CAAC;QACd,eAAU,GAAG,KAAK,CAAC;QACnB,YAAO,GAAG,gBAAgB,CAAC;QAE3B,UAAK,GAAG,YAAY,EAAE,CAAC,KAAK,CAAC;QAC7B,wBAAmB,GAAG,YAAY,EAAE,CAAC,mBAAmB,CAAC;QACzD,gBAAW,GAAG,YAAY,EAAE,CAAC,WAAW,CAAC;KAE+B;IAExE,KAAK;QACD,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM;YAClF,QAAQ,MAAM,CAAC,UAAU;gBACrB,KAAK,aAAa;oBACd,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACzC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC;oBACrD,MAAM;gBACV,KAAK,yBAAyB,CAAC;gBAC/B,KAAK,yBAAyB;oBAC1B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;oBACnC,MAAM;aACb;SACJ,CAAC,CAAC;KACN;;;;;IAMO,gBAAgB;QACpB,IAAI,UAA8B,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,mBAAmB,OAAO,CAAC,CAAC;QACrD,IAAI;YACA,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzD,IAAI,eAAe,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE;gBAC/C,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7D;SACJ;QAAC,OAAO,CAAM,EAAE;;SAEhB;QACD,OAAO,UAAU,CAAC;KACrB;;2GA5CQ,cAAc;+FAAd,cAAc,iDCT3B,4vEAwDA;2FD/Ca,cAAc;kBAL1B,SAAS;+BACI,WAAW;;;AECzB;;;MAMa,UAAU;IACnB,YAAoB,MAAc,EAAU,WAAwB;QAAhD,WAAM,GAAN,MAAM,CAAQ;QAAU,gBAAW,GAAX,WAAW,CAAa;KAAI;IAExE,WAAW,CAAC,KAA6B;QACrC,OAAO,IAAI,CAAC,WAAW,CAAC,wBAAwB,EAAE,CAAC,IAAI,CACnD,GAAG,CAAC,aAAa;YACb,IAAI,aAAa,EAAE;gBACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aAC/B;YACD,OAAO,CAAC,aAAa,CAAC;SACzB,CAAC,CACL,CAAC;KACL;;uGAZQ,UAAU;2GAAV,UAAU,cAFP,MAAM;2FAET,UAAU;kBAHtB,UAAU;mBAAC;oBACR,UAAU,EAAE,MAAM;iBACrB;;;MCNY,WAAW,GAAW;IAC/B;QACI,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,cAAc;QACzB,SAAS,EAAE,MAAM;QACjB,WAAW,EAAE,CAAC,UAAU,CAAC;KAC5B;;;MCCQ,WAAW;;wGAAX,WAAW;yGAAX,WAAW,iBAFL,cAAc,aAFnB,YAAY;yGAIb,WAAW,YAJX,CAAC,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;2FAIlD,WAAW;kBALvB,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;oBAC3D,OAAO,EAAE,EAAE;oBACX,YAAY,EAAE,CAAC,cAAc,CAAC;iBACjC;;;ACXD;;ACAA;;;;;;"}
|