@dignite/ng.site 2.0.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{dignite-ng.site-content-editor.component-DA6FaJSU.mjs → dignite-ng.site-content-editor.component-DJEBh1ok.mjs} +2 -2
- package/fesm2022/{dignite-ng.site-content-editor.component-DA6FaJSU.mjs.map → dignite-ng.site-content-editor.component-DJEBh1ok.mjs.map} +1 -1
- package/fesm2022/{dignite-ng.site-content-types.component-Dnqe8A4t.mjs → dignite-ng.site-content-types.component-B3GpUeEa.mjs} +3 -3
- package/fesm2022/{dignite-ng.site-content-types.component-Dnqe8A4t.mjs.map → dignite-ng.site-content-types.component-B3GpUeEa.mjs.map} +1 -1
- package/fesm2022/{dignite-ng.site-contents.component-Ch5GYIHE.mjs → dignite-ng.site-contents.component-ht0WYCSN.mjs} +3 -3
- package/fesm2022/{dignite-ng.site-contents.component-Ch5GYIHE.mjs.map → dignite-ng.site-contents.component-ht0WYCSN.mjs.map} +1 -1
- package/fesm2022/{dignite-ng.site-dignite-ng.site-BMcNABSG.mjs → dignite-ng.site-dignite-ng.site-CJVw2UzZ.mjs} +145 -29
- package/fesm2022/dignite-ng.site-dignite-ng.site-CJVw2UzZ.mjs.map +1 -0
- package/fesm2022/{dignite-ng.site-fields.component-BaK27N9k.mjs → dignite-ng.site-fields.component-DpKMPRz3.mjs} +4 -4
- package/fesm2022/{dignite-ng.site-fields.component-BaK27N9k.mjs.map → dignite-ng.site-fields.component-DpKMPRz3.mjs.map} +1 -1
- package/fesm2022/{dignite-ng.site-pages.component-BwGyK7jw.mjs → dignite-ng.site-pages.component-Dc3kz6EW.mjs} +3 -3
- package/fesm2022/{dignite-ng.site-pages.component-BwGyK7jw.mjs.map → dignite-ng.site-pages.component-Dc3kz6EW.mjs.map} +1 -1
- package/fesm2022/dignite-ng.site-setting-management.mjs +77 -4
- package/fesm2022/dignite-ng.site-setting-management.mjs.map +1 -1
- package/fesm2022/dignite-ng.site-theme-workbench.component-HoSTVRBM.mjs +1283 -0
- package/fesm2022/dignite-ng.site-theme-workbench.component-HoSTVRBM.mjs.map +1 -0
- package/fesm2022/dignite-ng.site.mjs +1 -1
- package/package.json +1 -1
- package/types/dignite-ng.site-setting-management.d.ts +34 -4
- package/types/dignite-ng.site.d.ts +173 -89
- package/fesm2022/dignite-ng.site-dignite-ng.site-BMcNABSG.mjs.map +0 -1
- package/fesm2022/dignite-ng.site-theme-workbench.component-CA47DnTj.mjs +0 -1206
- package/fesm2022/dignite-ng.site-theme-workbench.component-CA47DnTj.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dignite-ng.site-dignite-ng.site-CJVw2UzZ.mjs","sources":["../../../projects/site/src/lib/enums/policy-names.ts","../../../projects/site/src/lib/proxy/dignite/site/admin/content-types/content-type-admin.service.ts","../../../projects/site/src/lib/field-types/content/content-configuration.ts","../../../projects/site/src/lib/field-types/content/content-config.component.ts","../../../projects/site/src/lib/field-types/content/content-config.component.html","../../../projects/site/src/lib/proxy/dignite/site/admin/contents/content-admin.service.ts","../../../projects/site/src/lib/field-types/content/content-control.component.ts","../../../projects/site/src/lib/field-types/content/content-control.component.html","../../../projects/site/src/lib/field-types/content/content-view.component.ts","../../../projects/site/src/lib/field-types/content/content-view.component.html","../../../projects/site/src/lib/field-types/content/content-field-type.ts","../../../projects/site/src/lib/files/services/site-file-containers.ts","../../../projects/site/src/lib/field-types/file/file-configuration.ts","../../../projects/site/src/lib/field-types/file/file-config.component.ts","../../../projects/site/src/lib/field-types/file/file-config.component.html","../../../projects/site/src/lib/files/services/validators.service.ts","../../../projects/site/src/lib/proxy/dignite/site/admin/files/directory-admin.service.ts","../../../projects/site/src/lib/proxy/dignite/site/admin/files/file-admin.service.ts","../../../projects/site/src/lib/files/components/file-directory-tree/file-directory-tree.component.ts","../../../projects/site/src/lib/files/components/file-directory-tree/file-directory-tree.component.html","../../../projects/site/src/lib/files/previews/models.ts","../../../projects/site/src/lib/files/services/site-file-url.ts","../../../projects/site/src/lib/files/services/site-file-url.service.ts","../../../projects/site/src/lib/files/previews/file-preview.component.ts","../../../projects/site/src/lib/files/previews/file-preview.component.html","../../../projects/site/src/lib/files/pipes/format-file-size.pipe.ts","../../../projects/site/src/lib/files/components/file-modal/file-modal.component.ts","../../../projects/site/src/lib/files/components/file-modal/file-modal.component.html","../../../projects/site/src/lib/files/components/file-picker/file-picker.component.ts","../../../projects/site/src/lib/files/components/file-picker/file-picker.component.html","../../../projects/site/src/lib/field-types/file/file-control.component.ts","../../../projects/site/src/lib/field-types/file/file-control.component.html","../../../projects/site/src/lib/field-types/file/file-view.component.ts","../../../projects/site/src/lib/field-types/file/file-view.component.html","../../../projects/site/src/lib/field-types/file/file-field-type.ts","../../../projects/site/src/lib/field-types/seo/seo-configuration.ts","../../../projects/site/src/lib/field-types/seo/seo-config.component.ts","../../../projects/site/src/lib/field-types/seo/seo-config.component.html","../../../projects/site/src/lib/field-types/seo/seo-text-width.ts","../../../projects/site/src/lib/field-types/seo/seo-og-image.ts","../../../projects/site/src/lib/field-types/seo/seo-control.component.ts","../../../projects/site/src/lib/field-types/seo/seo-control.component.html","../../../projects/site/src/lib/field-types/seo/seo-view.component.ts","../../../projects/site/src/lib/field-types/seo/seo-view.component.html","../../../projects/site/src/lib/field-types/seo/seo-field-type.ts","../../../projects/site/src/lib/files/services/object-url.service.ts","../../../projects/site/src/lib/files/components/file-upload/file-upload.component.ts","../../../projects/site/src/lib/files/components/file-upload/file-upload.component.html","../../../projects/site/src/lib/files/services/site-ckeditor-config-contributor.ts","../../../projects/site/src/lib/files/services/site-ckeditor-display-contributor.ts","../../../projects/site/src/lib/files/services/site-ckeditor-upload-provider.ts","../../../projects/site/src/lib/files/index.ts","../../../projects/site/src/lib/proxy/dignite/abp/flex-fields/flex-field-query-operator.enum.ts","../../../projects/site/src/lib/proxy/dignite/abp/flex-fields/flex-field-value-type.enum.ts","../../../projects/site/src/lib/proxy/dignite/site/admin/fields/field-admin.service.ts","../../../projects/site/src/lib/proxy/dignite/site/admin/languages/site-language-admin.service.ts","../../../projects/site/src/lib/proxy/dignite/site/admin/pages/page-admin.service.ts","../../../projects/site/src/lib/proxy/dignite/site/admin/schema/site-schema-admin.service.ts","../../../projects/site/src/lib/proxy/dignite/site/admin/seo/site-seo-settings-admin.service.ts","../../../projects/site/src/lib/proxy/dignite/site/admin/themes/site-theme-admin.service.ts","../../../projects/site/src/lib/proxy/dignite/site/admin/themes/site-theme-usage-kind-dto.enum.ts","../../../projects/site/src/lib/proxy/dignite/site/admin/themes/site-theme-transfer-admin.service.ts","../../../projects/site/src/lib/proxy/dignite/site/contents/content-status.enum.ts","../../../projects/site/src/lib/proxy/dignite/site/themes/site-theme-file-status.enum.ts","../../../projects/site/src/lib/proxy/dignite/site/themes/site-theme-issue-severity.enum.ts","../../../projects/site/src/lib/services/content-list-params.ts","../../../projects/site/src/lib/services/content-list-state.service.ts","../../../projects/site/src/lib/services/content-query.service.ts","../../../projects/site/src/lib/services/site-reference-data.service.ts","../../../projects/site/src/lib/site.routes.ts","../../../projects/site/src/public-api.ts","../../../projects/site/src/dignite-ng.site.ts"],"sourcesContent":["/**\n * Mirrors `SiteAdminPermissions` (`src/Dignite.Site.Admin.Application.Contracts/Permissions/SiteAdminPermissions.cs`).\n *\n * Note the group name is the bare string `SiteAdmin`, not `Site.Admin` - these are the exact strings the\n * server checks, so they cannot be prefixed further here.\n */\n// A plain enum, not `const enum`: templates reference these through a component property, and a\n// `const enum` is erased at compile time so it has no value to read at runtime.\nexport enum eSitePolicyNames {\n Pages = 'SiteAdmin.Pages',\n PagesCreate = 'SiteAdmin.Pages.Create',\n PagesUpdate = 'SiteAdmin.Pages.Update',\n PagesDelete = 'SiteAdmin.Pages.Delete',\n\n ContentTypes = 'SiteAdmin.ContentTypes',\n ContentTypesCreate = 'SiteAdmin.ContentTypes.Create',\n ContentTypesUpdate = 'SiteAdmin.ContentTypes.Update',\n ContentTypesDelete = 'SiteAdmin.ContentTypes.Delete',\n\n Fields = 'SiteAdmin.Fields',\n FieldsCreate = 'SiteAdmin.Fields.Create',\n FieldsUpdate = 'SiteAdmin.Fields.Update',\n FieldsDelete = 'SiteAdmin.Fields.Delete',\n /** Separate from update on purpose: renaming a field migrates every stored value. */\n FieldsRename = 'SiteAdmin.Fields.Rename',\n\n FieldGroups = 'SiteAdmin.FieldGroups',\n FieldGroupsCreate = 'SiteAdmin.FieldGroups.Create',\n FieldGroupsUpdate = 'SiteAdmin.FieldGroups.Update',\n FieldGroupsDelete = 'SiteAdmin.FieldGroups.Delete',\n\n Contents = 'SiteAdmin.Contents',\n ContentsCreate = 'SiteAdmin.Contents.Create',\n ContentsUpdate = 'SiteAdmin.Contents.Update',\n ContentsDelete = 'SiteAdmin.Contents.Delete',\n\n Themes = 'SiteAdmin.Themes',\n /** Changing the working copy: files, the default layout, restoring a release into it. */\n ThemesEdit = 'SiteAdmin.Themes.Edit',\n /** Changing what the site renders: publishing, and making an older release live. */\n ThemesPublish = 'SiteAdmin.Themes.Publish',\n\n Languages = 'SiteAdmin.Languages',\n /** Setting them: the default language is the one without a URL prefix, so this moves the address of pages. */\n LanguagesUpdate = 'SiteAdmin.Languages.Update',\n\n Seo = 'SiteAdmin.Seo',\n /** Setting the default share image: the one a page without a share image of its own is shared with. */\n SeoUpdate = 'SiteAdmin.Seo.Update',\n}\n","import type { CreateContentTypeDto, UpdateContentTypeDto } from './models';\nimport { RestService, Rest } from '@abp/ng.core';\nimport type { ListResultDto } from '@abp/ng.core';\nimport { Injectable, inject } from '@angular/core';\nimport type { ContentTypeDto } from '../../content-types/models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ContentTypeAdminService {\n private restService = inject(RestService);\n apiName = 'SiteAdmin';\n \n\n create = (input: CreateContentTypeDto, config?: Partial<Rest.Config>) =>\n this.restService.request<any, ContentTypeDto>({\n method: 'POST',\n url: '/api/site-admin/content-types',\n body: input,\n },\n { apiName: this.apiName,...config });\n \n\n delete = (id: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, void>({\n method: 'DELETE',\n url: `/api/site-admin/content-types/${id}`,\n },\n { apiName: this.apiName,...config });\n \n\n findByName = (pageId: string, name: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, ContentTypeDto>({\n method: 'GET',\n url: `/api/site-admin/content-types/by-page/${pageId}/by-name`,\n params: { name },\n },\n { apiName: this.apiName,...config });\n \n\n get = (id: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, ContentTypeDto>({\n method: 'GET',\n url: `/api/site-admin/content-types/${id}`,\n },\n { apiName: this.apiName,...config });\n \n\n getList = (config?: Partial<Rest.Config>) =>\n this.restService.request<any, ListResultDto<ContentTypeDto>>({\n method: 'GET',\n url: '/api/site-admin/content-types',\n },\n { apiName: this.apiName,...config });\n \n\n getListByPage = (pageId: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, ListResultDto<ContentTypeDto>>({\n method: 'GET',\n url: `/api/site-admin/content-types/by-page/${pageId}`,\n },\n { apiName: this.apiName,...config });\n \n\n update = (id: string, input: UpdateContentTypeDto, config?: Partial<Rest.Config>) =>\n this.restService.request<any, ContentTypeDto>({\n method: 'PUT',\n url: `/api/site-admin/content-types/${id}`,\n body: input,\n },\n { apiName: this.apiName,...config });\n}","/**\n * Configuration of a `Content` field, shaped for `FormBuilder.group()`. Mirrors `ContentConfiguration`\n * (`src/Dignite.FlexFields.Site/Dignite/FlexFields/Site/Content/ContentConfiguration.cs`).\n *\n * The property names are the **stored** configuration keys, not a naming choice.\n */\nexport class ContentConfiguration {\n /** Restricts the picker to Content of this content type. `null` = unrestricted. */\n 'Content.ContentTypeId': unknown = [null];\n\n 'Content.Multiple': unknown = [false];\n\n 'Content.Placeholder': unknown = [''];\n}\n","import { CoreModule } from '@abp/ng.core';\nimport { CommonModule } from '@angular/common';\nimport { Component, OnInit, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FieldTypeConfigBase } from '@dignite/ng.flex-fields';\nimport { ContentTypeAdminService } from '../../proxy/dignite/site/admin/content-types/content-type-admin.service';\nimport type { ContentTypeDto } from '../../proxy/dignite/site/content-types/models';\nimport { ContentConfiguration } from './content-configuration';\n\n/** Designer-side editor for a `Content` field's configuration: which content type to restrict to (if\n * any), single- vs. multi-select, and a placeholder. */\n@Component({\n selector: 'site-content-config',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './content-config.component.html',\n imports: [CoreModule, CommonModule, ReactiveFormsModule],\n})\nexport class ContentConfigComponent extends FieldTypeConfigBase implements OnInit {\n private readonly contentTypeAdminService = inject(ContentTypeAdminService);\n\n contentTypes: ContentTypeDto[] = [];\n\n protected configurationDefaults(): object {\n return new ContentConfiguration();\n }\n\n ngOnInit(): void {\n this.contentTypeAdminService.getList().subscribe(result => {\n this.contentTypes = result.items ?? [];\n });\n }\n}\n","<form [formGroup]=\"formEntity\">\n <div formGroupName=\"configuration\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{ 'FlexFieldsSite::Content:ContentTypeId' | abpLocalization }}</label>\n <select class=\"form-select\" formControlName=\"Content.ContentTypeId\">\n <option [ngValue]=\"null\">{{ 'FlexFieldsSite::Content:AnyContentType' | abpLocalization }}</option>\n <option *ngFor=\"let item of contentTypes\" [ngValue]=\"item.id\">{{ item.displayName }}</option>\n </select>\n </div>\n <div class=\"form-check mb-3\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n id=\"content-config-multiple\"\n formControlName=\"Content.Multiple\"\n />\n <label class=\"form-check-label\" for=\"content-config-multiple\">\n {{ 'FlexFieldsSite::Content:Multiple' | abpLocalization }}\n </label>\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{ 'FlexFieldsSite::Content:Placeholder' | abpLocalization }}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"Content.Placeholder\" />\n </div>\n </div>\n</form>\n","import type { CreateContentDto, GetContentListInput, UpdateContentDto } from './models';\nimport { RestService, Rest } from '@abp/ng.core';\nimport type { PagedResultDto } from '@abp/ng.core';\nimport { Injectable, inject } from '@angular/core';\nimport type { ContentDto } from '../../contents/models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ContentAdminService {\n private restService = inject(RestService);\n apiName = 'SiteAdmin';\n \n\n create = (input: CreateContentDto, config?: Partial<Rest.Config>) =>\n this.restService.request<any, ContentDto>({\n method: 'POST',\n url: '/api/site-admin/contents',\n body: input,\n },\n { apiName: this.apiName,...config });\n \n\n delete = (id: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, void>({\n method: 'DELETE',\n url: `/api/site-admin/contents/${id}`,\n },\n { apiName: this.apiName,...config });\n \n\n findBySlug = (pageId: string, cultureName: string, slug: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, ContentDto>({\n method: 'GET',\n url: '/api/site-admin/contents/by-slug',\n params: { pageId, cultureName, slug },\n },\n { apiName: this.apiName,...config });\n \n\n get = (id: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, ContentDto>({\n method: 'GET',\n url: `/api/site-admin/contents/${id}`,\n },\n { apiName: this.apiName,...config });\n \n\n getList = (input: GetContentListInput, config?: Partial<Rest.Config>) =>\n this.restService.request<any, PagedResultDto<ContentDto>>({\n method: 'GET',\n url: '/api/site-admin/contents',\n params: { pageId: input.pageId, cultureName: input.cultureName, contentTypeId: input.contentTypeId, status: input.status, publishedBefore: input.publishedBefore, publishedAfter: input.publishedAfter, filter: input.filter, flexFieldConditions: input.flexFieldConditions, sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount },\n },\n { apiName: this.apiName,...config });\n \n\n update = (id: string, input: UpdateContentDto, config?: Partial<Rest.Config>) =>\n this.restService.request<any, ContentDto>({\n method: 'PUT',\n url: `/api/site-admin/contents/${id}`,\n body: input,\n },\n { apiName: this.apiName,...config });\n}","import { CommonModule } from '@angular/common';\nimport { Component, OnInit, inject, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { AbstractControl, ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';\nimport { FieldTypeControlBase, readStringList } from '@dignite/ng.flex-fields';\nimport { ContentAdminService } from '../../proxy/dignite/site/admin/contents/content-admin.service';\nimport type { ContentDto } from '../../proxy/dignite/site/contents/models';\nimport { ContentConfiguration } from './content-configuration';\n\n/**\n * Edits the value of a `Content` field: a picker over other Content, restricted to\n * `Content.ContentTypeId` when set. The value is always a flat array of ids, even in single-select mode\n * - matching the server's `ContentFieldType`, which always stores `List<Guid>`.\n *\n * The picker list is fetched once, in {@link ngOnInit} - `Content.ContentTypeId` is fixed for the\n * lifetime of one rendered control (it belongs to the field's own definition, not something this\n * component's own inputs can change), so there is nothing to react to afterward.\n */\n@Component({\n selector: 'site-content-control',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './content-control.component.html',\n imports: [CommonModule, ReactiveFormsModule],\n})\nexport class ContentControlComponent extends FieldTypeControlBase implements OnInit {\n private readonly contentAdminService = inject(ContentAdminService);\n\n /**\n * A signal, not a plain field: it is filled by an HTTP callback, and this control renders in the content\n * editor's page flow, under the host layout's OnPush ancestors - a plain-field write there never marks\n * them for check, so the options (and a stored selection) would stay blank until an unrelated event.\n */\n readonly options = signal<ContentDto[]>([]);\n\n get multiple(): boolean {\n return !!this.fieldValue?.field.configuration['Content.Multiple'];\n }\n\n get placeholder(): string {\n return (this.fieldValue?.field.configuration['Content.Placeholder'] as string) ?? '';\n }\n\n protected configurationDefaults(): object {\n return new ContentConfiguration();\n }\n\n protected createControl(): AbstractControl {\n const validators: ValidatorFn[] = [];\n if (this.fieldValue!.required) {\n validators.push(Validators.required);\n }\n\n const stored = readStringList(this.selectedValue).filter(value => value !== '');\n return this.fb.control(this.multiple ? stored : (stored[0] ?? ''), validators);\n }\n\n ngOnInit(): void {\n const contentTypeId = this.fieldValue?.field.configuration['Content.ContentTypeId'] as\n | string\n | null\n | undefined;\n\n this.contentAdminService\n .getList({ contentTypeId: contentTypeId || null, skipCount: 0, maxResultCount: 100 })\n .subscribe(result => {\n this.options.set(result.items ?? []);\n });\n }\n}\n","<div [formGroup]=\"entityForm\">\n <div [formGroupName]=\"parentField\">\n <div class=\"mb-3\">\n <label class=\"form-label\" *ngIf=\"fieldValue.field.displayName\">\n {{ fieldValue.field.displayName }}\n </label>\n @if (multiple) {\n <select\n class=\"form-select\"\n multiple\n [attr.data-flex-field-name]=\"fieldValue.field.name\"\n [formControlName]=\"fieldValue.field.name\"\n >\n <option *ngFor=\"let item of options()\" [value]=\"item.id\">{{ item.slug }}</option>\n </select>\n } @else {\n <select\n class=\"form-select\"\n [attr.data-flex-field-name]=\"fieldValue.field.name\"\n [formControlName]=\"fieldValue.field.name\"\n >\n <option value=\"\">{{ placeholder }}</option>\n <option *ngFor=\"let item of options()\" [value]=\"item.id\">{{ item.slug }}</option>\n </select>\n }\n <small class=\"form-text text-muted d-block\" *ngIf=\"fieldValue.field.description\">\n {{ fieldValue.field.description }}\n </small>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnChanges, inject, signal, ChangeDetectionStrategy } from '@angular/core';\nimport type { FlexFieldValue } from '@dignite/ng.flex-fields';\nimport { readStringList } from '@dignite/ng.flex-fields';\nimport { forkJoin, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { ContentAdminService } from '../../proxy/dignite/site/admin/contents/content-admin.service';\nimport type { ContentDto } from '../../proxy/dignite/site/contents/models';\n\n/**\n * Displays the value of a `Content` field read-only: the referenced Content, resolved by id. An id\n * that no longer resolves (deleted since picked) is silently dropped rather than shown as an error -\n * the same \"fail open\" stance the server's own `Content.cshtml` partial takes.\n */\n@Component({\n selector: 'site-content-view',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './content-view.component.html',\n imports: [CommonModule],\n})\nexport class ContentViewComponent implements OnChanges {\n private readonly contentAdminService = inject(ContentAdminService);\n\n @Input() showInList = false;\n\n @Input() fields?: FlexFieldValue;\n\n /** Registration key of the field type - always `Content` here. */\n @Input() type?: string;\n\n @Input() value: unknown = '';\n\n /**\n * A signal, not a plain field: it is filled by an HTTP callback, and this view renders in the content\n * list's page flow, under the host layout's OnPush ancestors - a plain-field write there never marks\n * them for check, so the cell would stay at `-` until an unrelated event.\n */\n readonly resolved = signal<ContentDto[]>([]);\n\n get summaryText(): string {\n const resolved = this.resolved();\n return resolved.length === 0 ? '-' : resolved.map(item => item.slug).join(', ');\n }\n\n ngOnChanges(): void {\n const ids = readStringList(this.value).filter(id => id !== '');\n\n if (ids.length === 0) {\n this.resolved.set([]);\n return;\n }\n\n forkJoin(ids.map(id => this.contentAdminService.get(id).pipe(catchError(() => of(null))))).subscribe(\n results => {\n this.resolved.set(results.filter((item): item is ContentDto => item !== null));\n },\n );\n }\n}\n","@if (showInList) {\n {{ summaryText }}\n} @else {\n <div class=\"flex-field flex-field-view flex-field-view-content\">\n <span class=\"flex-field-label\" *ngIf=\"fields?.field?.displayName\">{{ fields.field.displayName }}</span>\n @if (resolved().length === 0) {\n <span class=\"flex-field-value\">-</span>\n } @else {\n <ul class=\"flex-field-value flex-field-value-content\">\n <li *ngFor=\"let item of resolved()\">{{ item.slug }}</li>\n </ul>\n }\n </div>\n}\n","import type { FieldTypeDefinition } from '@dignite/ng.flex-fields';\nimport { ContentConfigComponent } from './content-config.component';\nimport { ContentControlComponent } from './content-control.component';\nimport { ContentViewComponent } from './content-view.component';\n\n/** The registration key. Must equal `ContentFieldType.ControlName` on the server. */\nexport const CONTENT_FIELD_TYPE_NAME = 'Content';\n\n/**\n * Site's 8th field type, alongside the six the flex-fields library ships and Site's own `Seo` (the\n * 7th). The server registers `ContentFieldType` through DI automatically; the client has no equivalent\n * discovery, so it is registered here and wired in through `provideSite()` (GitHub issue #49).\n *\n * Named \"Content\" rather than DynamicForms' own \"Entry\" - Site's domain has no \"Entry\" concept, only\n * `Content`, so the field type is named after what it actually references.\n *\n * **No search component.** `ContentFieldType.IndexValueType` is `Guid` on the server (so a future\n * filter UI is possible), but no `searchComponent` ships this round - same state CKEditor/the file field\n * are currently in.\n */\nexport const CONTENT_FIELD_TYPE: FieldTypeDefinition = {\n name: CONTENT_FIELD_TYPE_NAME,\n displayNameKey: 'FlexFieldsSite::FieldType:Content',\n configComponent: ContentConfigComponent,\n controlComponent: ContentControlComponent,\n viewComponent: ContentViewComponent,\n};\n","/**\n * Site's file containers - the server's `SiteFileContainerNames`. The file library works in these only;\n * a file field names one of them. `images` takes pictures, `attachments` documents only.\n */\nexport const SITE_FILE_CONTAINER_NAMES = ['images', 'attachments'] as const;\n\n/** Pictures only (raster formats, no SVG) - what a share image or an image field uses. */\nexport const SITE_IMAGES_CONTAINER_NAME = 'images';\n","import { Validators } from '@angular/forms';\n\n/**\n * The configuration keys of the file field type. **Persisted data**: every field (and every Matrix\n * block's nested configuration) stores them under these names, which date from when the field type was\n * `Dignite.Abp.FlexFields`' - the same keys as the server's `FileFieldConfigurationNames`.\n */\nexport const FILE_FIELD_CONFIGURATION_NAMES = {\n fileContainerName: 'FileExplorer.FileContainerName',\n uploadFileMultiple: 'FileExplorer.UploadFileMultiple',\n} as const;\n\n/** Configuration of a file field, shaped for `FormBuilder.group()`. */\nexport class FileFieldConfiguration {\n // No fallback container anywhere downstream (the control prompts instead of guessing), so this has to\n // be required here - the point where a misconfiguration is cheapest to catch.\n [FILE_FIELD_CONFIGURATION_NAMES.fileContainerName]: unknown = ['', [Validators.required]];\n\n [FILE_FIELD_CONFIGURATION_NAMES.uploadFileMultiple]: unknown = [false];\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { CoreModule } from '@abp/ng.core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FieldTypeConfigBase } from '@dignite/ng.flex-fields';\nimport { SITE_FILE_CONTAINER_NAMES } from '../../files/services/site-file-containers';\nimport { FILE_FIELD_CONFIGURATION_NAMES, FileFieldConfiguration } from './file-configuration';\n\n/** Designer-side editor for a file field's configuration: which of Site's containers, one file or many. */\n@Component({\n selector: 'site-file-config',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './file-config.component.html',\n imports: [CoreModule, ReactiveFormsModule],\n})\nexport class FileConfigComponent extends FieldTypeConfigBase {\n readonly containerNames = SITE_FILE_CONTAINER_NAMES;\n readonly names = FILE_FIELD_CONFIGURATION_NAMES;\n\n protected configurationDefaults(): object {\n return new FileFieldConfiguration();\n }\n}\n","<form [formGroup]=\"formEntity\">\n <div formGroupName=\"configuration\">\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"siteFileFieldContainerName\">\n {{ 'FlexFieldsSite::File:FileContainerName' | abpLocalization }}\n </label>\n <select class=\"form-select\" id=\"siteFileFieldContainerName\" [formControlName]=\"names.fileContainerName\">\n <option value=\"\"></option>\n @for (containerName of containerNames; track containerName) {\n <option [value]=\"containerName\">{{ containerName }}</option>\n }\n </select>\n </div>\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [formControlName]=\"names.uploadFileMultiple\"\n id=\"siteFileFieldUploadFileMultiple\"\n />\n <label class=\"form-check-label\" for=\"siteFileFieldUploadFileMultiple\">\n {{ 'FlexFieldsSite::File:UploadFileMultiple' | abpLocalization }}\n </label>\n </div>\n </div>\n <button type=\"submit\" style=\"display: none\" #submitclick></button>\n </div>\n</form>\n","import { LocalizationService } from '@abp/ng.core';\nimport { ToasterService } from '@abp/ng.theme.shared';\nimport { Injectable } from '@angular/core';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ValidatorsService {\n constructor(private toaster: ToasterService, private localizationService: LocalizationService) {}\n\n isCheckForm(input: { [key: string]: boolean }, module = 'AbpValidation'): boolean {\n const keys = Object.keys(input);\n for (const element of keys) {\n if (input[element] === false) {\n const displayName = element.charAt(0).toUpperCase() + element.slice(1);\n let info = `\"${this.localizationService.instant(`${module}::${displayName}`)}\" `;\n\n if (element.includes('.') && !element.includes('].')) {\n const parts = element.split('.');\n info = `\"${this.localizationService.instant(`${module}::${parts[0]}`)}.${this.localizationService.instant(`${module}::${parts[1]}`)}\"`;\n }\n\n if (element.includes('].')) {\n const parts = element.split('].');\n const arrayStart = parts[0].split('[');\n info = `\"${this.localizationService.instant(`${module}::${arrayStart[0]}`)}[${arrayStart[1]}].${this.localizationService.instant(`${module}::${parts[1]}`)}\"`;\n }\n\n this.toaster.warn(info + this.localizationService.instant('AbpValidation::ThisFieldIsNotValid.'));\n return true;\n }\n }\n\n return false;\n }\n\n getFormValidationStatus(formEntity: FormGroup | FormArray): Record<string, boolean> {\n const validationStatus: Record<string, boolean> = {};\n\n const traverseForm = (form: FormGroup | FormArray, prefix = '') => {\n if (form instanceof FormGroup) {\n Object.keys(form.controls).forEach(key => {\n const control = form.controls[key];\n const fullKey = prefix ? `${prefix}.${key}` : key;\n if (control instanceof FormControl) {\n validationStatus[fullKey] = control.valid;\n } else if (control instanceof FormArray || control instanceof FormGroup) {\n traverseForm(control, fullKey);\n }\n });\n } else {\n form.controls.forEach((control, index) => {\n const fullKey = prefix ? `${prefix}[${index}]` : `[${index}]`;\n if (control instanceof FormControl) {\n validationStatus[fullKey] = control.valid;\n } else if (control instanceof FormArray || control instanceof FormGroup) {\n traverseForm(control, fullKey);\n }\n });\n }\n };\n\n traverseForm(formEntity);\n\n return validationStatus;\n }\n}\n","import type { CreateDirectoryInput, DirectoryDescriptorDto, DirectoryDescriptorInfoDto, GetDirectoriesInput, MoveDirectoryInput, UpdateDirectoryInput } from './models';\nimport { RestService, Rest } from '@abp/ng.core';\nimport type { ListResultDto } from '@abp/ng.core';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DirectoryAdminService {\n private restService = inject(RestService);\n apiName = 'SiteAdmin';\n \n\n create = (input: CreateDirectoryInput, config?: Partial<Rest.Config>) =>\n this.restService.request<any, DirectoryDescriptorDto>({\n method: 'POST',\n url: '/api/site-admin/files/directories',\n body: input,\n },\n { apiName: this.apiName,...config });\n \n\n delete = (id: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, void>({\n method: 'DELETE',\n url: `/api/site-admin/files/directories/${id}`,\n },\n { apiName: this.apiName,...config });\n \n\n get = (id: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, DirectoryDescriptorDto>({\n method: 'GET',\n url: `/api/site-admin/files/directories/${id}`,\n },\n { apiName: this.apiName,...config });\n \n\n getList = (input: GetDirectoriesInput, config?: Partial<Rest.Config>) =>\n this.restService.request<any, ListResultDto<DirectoryDescriptorInfoDto>>({\n method: 'GET',\n url: '/api/site-admin/files/directories',\n params: { containerName: input.containerName },\n },\n { apiName: this.apiName,...config });\n \n\n move = (id: string, input: MoveDirectoryInput, config?: Partial<Rest.Config>) =>\n this.restService.request<any, DirectoryDescriptorDto>({\n method: 'PUT',\n url: `/api/site-admin/files/directories/${id}/move`,\n body: input,\n },\n { apiName: this.apiName,...config });\n \n\n update = (id: string, input: UpdateDirectoryInput, config?: Partial<Rest.Config>) =>\n this.restService.request<any, DirectoryDescriptorDto>({\n method: 'PUT',\n url: `/api/site-admin/files/directories/${id}`,\n body: input,\n },\n { apiName: this.apiName,...config });\n}","import type { CreateFileInput, FileContainerConfigurationDto, FileDescriptorDto, GetFilesInput, UpdateFileInput } from './models';\nimport { RestService, Rest } from '@abp/ng.core';\nimport type { PagedResultDto } from '@abp/ng.core';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FileAdminService {\n private restService = inject(RestService);\n apiName = 'SiteAdmin';\n \n\n create = (input: CreateFileInput, config?: Partial<Rest.Config>) =>\n this.restService.request<any, FileDescriptorDto>({\n method: 'POST',\n url: '/api/site-admin/files',\n params: { containerName: input.containerName, directoryId: input.directoryId },\n body: input.file,\n },\n { apiName: this.apiName,...config });\n \n\n delete = (id: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, void>({\n method: 'DELETE',\n url: `/api/site-admin/files/${id}`,\n },\n { apiName: this.apiName,...config });\n \n\n get = (id: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, FileDescriptorDto>({\n method: 'GET',\n url: `/api/site-admin/files/${id}`,\n },\n { apiName: this.apiName,...config });\n \n\n getContainerConfiguration = (containerName: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, FileContainerConfigurationDto>({\n method: 'GET',\n url: `/api/site-admin/files/containers/${containerName}`,\n },\n { apiName: this.apiName,...config });\n \n\n getList = (input: GetFilesInput, config?: Partial<Rest.Config>) =>\n this.restService.request<any, PagedResultDto<FileDescriptorDto>>({\n method: 'GET',\n url: '/api/site-admin/files',\n params: { containerName: input.containerName, directoryId: input.directoryId, creatorId: input.creatorId, filter: input.filter, sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount },\n },\n { apiName: this.apiName,...config });\n \n\n update = (id: string, input: UpdateFileInput, config?: Partial<Rest.Config>) =>\n this.restService.request<any, FileDescriptorDto>({\n method: 'PUT',\n url: `/api/site-admin/files/${id}`,\n body: input,\n },\n { apiName: this.apiName,...config });\n}","/* eslint-disable @angular-eslint/component-selector */\nimport {\n AfterContentInit,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n inject,\n Input,\n Output,\n ViewChild,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { FormBuilder, FormGroup, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport * as DescriptorService from '../../../proxy/dignite/site/admin/files';\nimport { DirectoryDescriptorDto } from '../../../proxy/dignite/site/admin/files';\nimport { Confirmation, ConfirmationService, ThemeSharedModule } from '@abp/ng.theme.shared';\nimport { finalize, map, of, tap } from 'rxjs';\nimport { CoreModule, LocalizationService } from '@abp/ng.core';\nimport { ValidatorsService } from '../../services/validators.service';\nimport { CommonModule } from '@angular/common';\nimport { TreeModule } from '@abp/ng.components/tree';\n\nexport const MY_FILES_NODE_KEY = '__site-my-files__';\nexport const isMyFilesNode = (node: { key?: string } | null | undefined): boolean =>\n node?.key === MY_FILES_NODE_KEY;\n\n/**\n * A directory, reshaped in place by {@link FileDirectoryTreeComponent.buildNodeTree} into\n * what `abp-tree` expects (`title`/`key`/`children`/...), plus the synthetic \"My Files\" virtual root.\n */\nexport interface DirectoryTreeNode extends Partial<DirectoryDescriptorDto> {\n key: string;\n title: string;\n children: DirectoryTreeNode[];\n expanded: boolean;\n isLeaf?: boolean;\n isVirtualRoot?: boolean;\n isFirstChildOfDirectory?: boolean;\n}\n\ntype TreeDropEvent = {\n pos: number;\n dragNode: { key: string };\n node: {\n key: string;\n origin: { order: number; children: unknown[] };\n children?: Array<{ key: string }>;\n parentNode?: {\n key: string;\n origin: { order: number; children: unknown[] };\n children?: Array<{ key: string }>;\n parentNode?: { key: string } | null;\n } | null;\n };\n};\n\n@Component({\n selector: 'site-file-directory-tree',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './file-directory-tree.component.html',\n styleUrls: ['./file-directory-tree.component.scss'],\n imports: [CommonModule, FormsModule, ReactiveFormsModule, CoreModule, ThemeSharedModule, TreeModule],\n})\nexport class FileDirectoryTreeComponent implements AfterContentInit {\n private readonly hostElement = inject(ElementRef<HTMLElement>);\n\n constructor(\n private directoryAdminService: DescriptorService.DirectoryAdminService,\n private fb: FormBuilder,\n private confirmation: ConfirmationService,\n private localizationService: LocalizationService,\n ) {}\n\n directoryTree: DirectoryTreeNode[] = [];\n\n selectedTreeNode: DirectoryTreeNode | undefined;\n @Input()\n set theSelectedTreeNode(v: DirectoryTreeNode | undefined) {\n this.selectedTreeNode = v;\n }\n\n nodeBeingEdited: DirectoryTreeNode | undefined;\n\n expandedNodeKeys: string[] = [MY_FILES_NODE_KEY];\n\n @Input()\n set fileContainerName(v: string) {\n if (v) {\n this._fileContainerName = v;\n }\n }\n get fileContainerName(): string {\n return this._fileContainerName;\n }\n private _fileContainerName = '';\n\n @Output() nodeClick = new EventEmitter<DirectoryTreeNode>();\n @Output() treeNodeData = new EventEmitter<DirectoryTreeNode[]>();\n\n ngAfterContentInit(): void {\n if (this.fileContainerName) {\n this.loadData();\n }\n }\n\n loadData(): void {\n if (this.fileContainerName) {\n this.loadDirectoryTree();\n }\n }\n\n private loadDirectoryTree(): void {\n this.directoryAdminService\n .getList({ containerName: this.fileContainerName })\n .subscribe(res => {\n const directories = this.buildNodeTree(res.items);\n this.directoryTree = [this.createMyFilesNode(directories)];\n this.treeNodeData.emit(this.directoryTree);\n });\n }\n\n private createMyFilesNode(children: DirectoryTreeNode[]): DirectoryTreeNode {\n const title = this.localizationService.instant('Site::Files:MyFiles');\n return {\n id: MY_FILES_NODE_KEY,\n key: MY_FILES_NODE_KEY,\n name: title,\n title,\n parentId: null,\n children,\n expanded: this.expandedNodeKeys.includes(MY_FILES_NODE_KEY),\n isLeaf: children.length === 0,\n isVirtualRoot: true,\n };\n }\n\n isMyFilesNode = isMyFilesNode;\n\n /** Reshapes the flat, parent-referencing directory list into the nested tree `abp-tree` renders. */\n private buildNodeTree(\n items: DirectoryDescriptorDto[],\n parentId: string | null = null,\n ): DirectoryTreeNode[] {\n const result = (items as unknown as DirectoryTreeNode[])\n .filter(item => item.parentId === parentId)\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n\n result.forEach((node, index) => {\n node.title = node.name ?? '';\n node.key = node.id ?? '';\n node.expanded = this.expandedNodeKeys.includes(node.key);\n node.isFirstChildOfDirectory = parentId !== null && index === 0;\n node.children = (node.children ?? []) as DirectoryTreeNode[];\n node.children.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n if (node.children.length > 0) {\n this.buildNodeTree(node.children as unknown as DirectoryDescriptorDto[], node.id);\n }\n });\n\n return result;\n }\n\n /** Dragged-directory highlight state, tracked globally so it clears even if the drop lands outside the tree. */\n isDirectoryDragging = false;\n\n @HostListener('document:dragstart', ['$event'])\n onDirectoryDragStart(event: DragEvent): void {\n if (event.target instanceof Node && this.hostElement.nativeElement.contains(event.target)) {\n this.isDirectoryDragging = true;\n }\n }\n\n @HostListener('document:dragend')\n onDirectoryDragEnd(): void {\n this.isDirectoryDragging = false;\n }\n\n beforeDrop = (arg: unknown) => {\n const { pos, dragNode, node } = arg as TreeDropEvent;\n if (![0, 1, -1].includes(pos) || this.isMyFilesNode(dragNode)) {\n return of(false);\n }\n\n // \"My Files\" is the virtual root; a directory can't be dropped before or after it.\n if (this.isMyFilesNode(node) && pos !== 0) {\n return of(false);\n }\n\n const targetParent = node.parentNode;\n // The indent guide to the right of an expanded directory is technically \"before its first\n // child\", but the intended drop target there is still \"the sibling slot after that directory\" -\n // not a second way to create a child.\n const isIndentedFirstChildGap =\n pos === -1 &&\n !!targetParent &&\n !this.isMyFilesNode(targetParent) &&\n targetParent.children?.[0]?.key === node.key;\n\n if (isIndentedFirstChildGap) {\n const grandParentKey = targetParent.parentNode?.key;\n const parentId =\n !grandParentKey || grandParentKey === MY_FILES_NODE_KEY ? null : grandParentKey;\n const order = targetParent.origin.order + 1;\n\n return this.directoryAdminService.move(dragNode.key, { parentId, order }).pipe(\n tap(() => this.loadDirectoryTree()),\n // Refresh from the server's own reordering instead of letting ng-zorro also apply its\n // \"before the first child\" move locally.\n map(() => false),\n );\n }\n\n const parentKey = node.parentNode?.key;\n const parentId =\n pos === 0\n ? this.isMyFilesNode(node)\n ? null\n : node.key\n : !parentKey || parentKey === MY_FILES_NODE_KEY\n ? null\n : parentKey;\n const order =\n pos === 0\n ? (node.origin.children || []).length + 1\n : pos === 1\n ? node.origin.order + 1\n : node.origin.order;\n\n return this.directoryAdminService.move(dragNode.key, { parentId, order }).pipe(\n tap(() => this.loadDirectoryTree()),\n map(() => true),\n );\n };\n\n /**\n * The node icon itself stops propagation via `(click)=\"$event.stopPropagation()\"`, so a click on\n * it never reaches here - no need to distinguish where the click came from.\n */\n activeNode(node: DirectoryTreeNode): void {\n if (this.selectedTreeNode && this.selectedTreeNode.key === node.key) return;\n this.selectedTreeNode = node;\n this.nodeClick.emit(node);\n }\n\n isNodeSelected = (node: DirectoryTreeNode): boolean => {\n return !!this.selectedTreeNode && node.key === this.selectedTreeNode.key;\n };\n\n onExpandChange(event: { node: DirectoryTreeNode }): void {\n const key = event.node.key;\n this.expandedNodeKeys = this.expandedNodeKeys.includes(key)\n ? this.expandedNodeKeys.filter(k => k !== key)\n : [...this.expandedNodeKeys, key];\n }\n\n directoryFormModalOpen = false;\n directoryFormBusy = false;\n directoryForm: FormGroup | undefined;\n\n @ViewChild('directoryFormSubmit', { static: false }) directoryFormSubmit: ElementRef<HTMLButtonElement>;\n\n openDirectoryForm(parentNode?: DirectoryTreeNode, editing = false): void {\n this.directoryFormModalOpen = true;\n this.directoryForm = this.fb.group({\n containerName: [this.fileContainerName || '', Validators.required],\n name: ['', Validators.required],\n parentId: [\n parentNode && !this.isMyFilesNode(parentNode) ? parentNode.key : null,\n ],\n });\n\n if (editing && parentNode) {\n this.nodeBeingEdited = parentNode;\n this.directoryForm.patchValue({ name: parentNode.name });\n }\n }\n\n deleteDirectory(node: DirectoryTreeNode): void {\n this.confirmation\n .warn('Site::Files:DeletionConfirmationMessage', 'Site::Files:DeletionConfirmationTitle', {\n messageLocalizationParams: [node.title],\n })\n .subscribe((status: Confirmation.Status) => {\n if (status !== 'confirm') return;\n\n this.directoryAdminService.delete(node.key).subscribe(() => {\n this.directoryFormModalOpen = false;\n if (this.nodeBeingEdited && this.nodeBeingEdited.key === node.key) {\n this.nodeBeingEdited = undefined;\n }\n this.loadDirectoryTree();\n });\n });\n }\n\n onDirectoryFormVisibleChange(visible: boolean): void {\n if (!visible) {\n this.directoryForm = undefined;\n this.nodeBeingEdited = undefined;\n }\n }\n\n private readonly validatorsService = inject(ValidatorsService);\n\n saveDirectoryForm(): void {\n if (!this.directoryForm) return;\n\n const input = this.directoryForm.value;\n const validationStatus = this.validatorsService.getFormValidationStatus(this.directoryForm);\n if (this.validatorsService.isCheckForm(validationStatus, 'Site')) return;\n if (!this.directoryForm.valid || this.directoryFormBusy) return;\n\n this.directoryFormBusy = true;\n const request = this.nodeBeingEdited\n ? this.directoryAdminService.update(this.nodeBeingEdited.key, input)\n : this.directoryAdminService.create(input);\n\n request.pipe(finalize(() => (this.directoryFormBusy = false))).subscribe(() => {\n this.directoryFormModalOpen = false;\n this.onDirectoryFormVisibleChange(false);\n this.loadDirectoryTree();\n });\n }\n}\n","<div class=\"file-tree-panel\">\n <abp-tree class=\"mb-2\" [class.directory-dragging]=\"isDirectoryDragging\" [nodes]=\"directoryTree\" (nzExpandChange)=\"onExpandChange($event)\" [draggable]=\"true\"\n [beforeDrop]=\"beforeDrop\" (selectedNodeChange)=\"activeNode($event)\"\n [changeCheckboxWithNode]=\"true\" [isNodeSelected]=\"isNodeSelected\"\n (contextmenu)=\"$event.preventDefault()\">\n\n <ng-template #menu let-node>\n <button type=\"button\" class=\"dropdown-item\" (click.stop)=\"openDirectoryForm(node)\"><i\n class=\"me-1 fa fa-plus\"></i>{{'Site::Files:NewDirectory' | abpLocalization}}</button>\n @if (!isMyFilesNode(node)) {\n <button type=\"button\" class=\"dropdown-item\" (click.stop)=\"openDirectoryForm(node, true)\"><i\n class=\"me-1 fa fa-pencil\"></i>{{'AbpUi::Edit' | abpLocalization}}</button>\n <button type=\"button\" class=\"dropdown-item\" (click.stop)=\"deleteDirectory(node)\"><i\n class=\" me-1 fa fa-remove\"></i>{{'AbpUi::Delete' | abpLocalization}}</button>\n }\n </ng-template>\n\n <ng-template abpTreeNodeTemplate let-node>\n <div class=\"file-tree-node-drop-target\" [class.my-files-node]=\"isMyFilesNode(node)\"\n [class.first-child-of-directory]=\"node.origin?.isFirstChildOfDirectory\">\n <i class=\"fa me-1\" [class.fa-home]=\"isMyFilesNode(node)\" [class.fa-folder]=\"!isMyFilesNode(node)\"\n aria-hidden=\"true\" (click)=\"$event.stopPropagation()\"></i>\n <span>{{node.title}}</span>\n </div>\n </ng-template>\n\n <ng-template abpTreeExpandedIconTemplate let-node let-origin=\"origin\">\n @if (node.children.length>0 && !isMyFilesNode(node)) {\n <i aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"node.isExpanded ? minusIcon : plusIcon\"></ng-container></i>\n }\n </ng-template>\n\n <ng-template #minusIcon>\n <i class=\"fa fa-minus\" aria-hidden=\"true\"></i>\n </ng-template>\n\n <ng-template #plusIcon>\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i>\n </ng-template>\n </abp-tree>\n</div>\n <abp-modal [(visible)]=\"directoryFormModalOpen\" [busy]=\"directoryFormBusy\"\n (visibleChange)=\"onDirectoryFormVisibleChange($event)\">\n <ng-template #abpHeader>\n <h3>{{nodeBeingEdited?('AbpUi::Edit' | abpLocalization):('Site::Files:NewDirectory' | abpLocalization)}}\n </h3>\n </ng-template>\n <ng-template #abpBody>\n @if (directoryForm) {\n <form class=\"sites-modal-form\" #myForm=\"ngForm\" [formGroup]=\"directoryForm\"\n (keydown.enter)=\"$event.preventDefault()\" (submit)=\"saveDirectoryForm()\">\n <button type=\"submit\" #directoryFormSubmit style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Site::Files:DirectoryName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\">\n </div>\n </form>\n } @else {\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n }\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [loading]=\"directoryFormBusy\"\n (click)=\"directoryFormSubmit.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n </abp-modal>\n","export interface FileTypeIcon {\n type: string;\n icon: string;\n}\n\n/** Fallback icon by MIME type (or file extension, for the few types MIME can't distinguish). */\nexport const IMAGE_TYPE_OPTIONS: readonly FileTypeIcon[] = [\n { type: 'image/jpeg', icon: '' },\n { type: 'image/webp', icon: '' },\n { type: 'image/gif', icon: '' },\n { type: 'image/png', icon: '' },\n { type: 'image/bmp', icon: '' },\n { type: 'audio/ogg', icon: '' },\n { type: 'video/mp4', icon: '' },\n { type: 'application/pdf', icon: 'fa fa-file-pdf-o' },\n { type: 'application/msword', icon: 'fa fa-file-word-o' },\n {\n type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n icon: 'fa fa-file-word-o',\n },\n { type: 'application/vnd.ms-powerpoint', icon: 'fa fa-file-powerpoint-o' },\n {\n type: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n icon: 'fa fa-file-powerpoint-o',\n },\n { type: 'application/vnd.ms-excel', icon: 'fa fa-file-excel-o' },\n {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n icon: 'fa fa-file-excel-o',\n },\n { type: 'application/x-zip-compressed', icon: 'fa fa-file-archive-o' },\n { type: '7z', icon: 'fa fa-file-archive-o' },\n { type: 'text/plain', icon: 'fa fa-file-text-o' },\n { type: '', icon: 'fa fa-file-o' },\n];\n","/**\n * The path every Site file is served under - the server's `SiteFileUrl.RoutePrefix`. The admin API hands\n * out addresses relative to it (`FileDescriptorDto.url`, `/api/site-public/files/...`), and that\n * relative address is what a field stores: no host is written into content. The public site resolves it\n * against its own origin; this admin UI, served from another origin, shows it from its `SiteAdmin` API\n * host (`SiteFileUrlService`).\n */\nexport const SITE_FILE_PATH = '/api/site-public/files/';\n\n/** Whether `url` addresses a file Site serves (and so can be resized), as opposed to an external image. */\nexport function isSiteFileUrl(url: string | null | undefined): boolean {\n return !!url && url.toLowerCase().includes(SITE_FILE_PATH);\n}\n\n/**\n * `url` asked for at `width` x `height` (`?Width=&Height=`, the server crops to fill when both are given),\n * keeping every other query parameter (`__tenant`, on an address an earlier version issued). Anything that is not a Site file address\n * (a local `blob:` URL, an external image) comes back unchanged, as does a call without a size. Mirrors the\n * server's `SiteFileUrl.Sized`.\n */\nexport function sizedFileUrl(url: string | null | undefined, width?: number, height?: number): string {\n const value = url ?? '';\n if (!isSiteFileUrl(value) || (!width && !height)) {\n return value;\n }\n\n const queryStart = value.indexOf('?');\n const base = queryStart < 0 ? value : value.substring(0, queryStart);\n const kept =\n queryStart < 0\n ? []\n : value\n .substring(queryStart + 1)\n .split('&')\n .filter(parameter => {\n const name = parameter.split('=')[0].toLowerCase();\n return parameter && name !== 'width' && name !== 'height';\n });\n\n const size = [width ? `Width=${width}` : '', height ? `Height=${height}` : ''].filter(Boolean);\n return `${base}?${[...kept, ...size].join('&')}`;\n}\n\n/**\n * `url` as this admin UI loads it: a relative Site file address, on `apiBase` and naming the tenant\n * (`?__tenant=`) when `tenantId` is given. A stored address names no tenant, and an `<img>` request carries\n * none of the headers the UI's API calls do, so the host could not tell which tenant's file is meant. An\n * address that already has a `__tenant` (one an earlier version issued) keeps it. Anything else - an absolute\n * address, a local `blob:`/`data:` URL, an external image - comes back unchanged, as does every relative\n * address when `apiBase` and `tenantId` are both empty. Mirrors the server's `SiteFileUrl.Absolutize`.\n */\nexport function absoluteFileUrl(url: string | null | undefined, apiBase: string, tenantId?: string | null): string {\n const value = url ?? '';\n if (!value.toLowerCase().startsWith(SITE_FILE_PATH)) {\n return value;\n }\n\n return trimBase(apiBase) + withTenant(value, tenantId);\n}\n\n/**\n * The inverse of `absoluteFileUrl`: an address on `apiBase`, or a relative one, as it is stored - relative,\n * without the `__tenant` that `absoluteFileUrl` added for `tenantId`. Another tenant's `__tenant`, an empty\n * one and every address that is not a Site file come back unchanged.\n */\nexport function relativeFileUrl(url: string | null | undefined, apiBase: string, tenantId?: string | null): string {\n const value = url ?? '';\n const base = trimBase(apiBase);\n if (base && value.toLowerCase().startsWith(base.toLowerCase() + SITE_FILE_PATH)) {\n return withoutTenant(value.substring(base.length), tenantId);\n }\n\n return value.toLowerCase().startsWith(SITE_FILE_PATH) ? withoutTenant(value, tenantId) : value;\n}\n\nfunction withTenant(url: string, tenantId: string | null | undefined): string {\n if (!tenantId || /[?&]__tenant=/i.test(url)) {\n return url;\n }\n\n return `${url}${url.includes('?') ? '&' : '?'}__tenant=${encodeURIComponent(tenantId)}`;\n}\n\nfunction withoutTenant(url: string, tenantId: string | null | undefined): string {\n const queryStart = url.indexOf('?');\n if (!tenantId || queryStart < 0) {\n return url;\n }\n\n const added = `__tenant=${encodeURIComponent(tenantId)}`.toLowerCase();\n const kept = url\n .substring(queryStart + 1)\n .split('&')\n .filter(parameter => parameter.toLowerCase() !== added);\n const base = url.substring(0, queryStart);\n return kept.length ? `${base}?${kept.join('&')}` : base;\n}\n\nfunction trimBase(apiBase: string | null | undefined): string {\n return (apiBase ?? '').trim().replace(/\\/+$/, '');\n}\n","import { Injectable, inject } from '@angular/core';\nimport { EnvironmentService, SessionStateService } from '@abp/ng.core';\nimport { absoluteFileUrl, relativeFileUrl } from './site-file-url';\n\n/**\n * Where this admin UI shows Site's files from. A stored address is relative (`/api/site-public/files/...`,\n * see `SITE_FILE_PATH`), and this UI is served from an origin of its own, so the previews\n * (`site-file-preview`: the file picker and modal, a file field, the SEO share image) put the `SiteAdmin`\n * API's host - `environment.apis.SiteAdmin.url`, where the file library's admin API lives - in front of it.\n * The CKEditor field does the same inside the editor (`siteCKEditorConfigContributor`). The previews also name\n * the signed-in tenant (`?__tenant=`): a stored address names none, and an `<img>` request cannot carry the\n * header the UI's API calls use. Nothing that is saved carries that host or tenant.\n */\n@Injectable({ providedIn: 'root' })\nexport class SiteFileUrlService {\n private readonly environment = inject(EnvironmentService);\n private readonly session = inject(SessionStateService);\n\n /** The `SiteAdmin` API's base URL, with no trailing slash; empty when the UI shares its API's origin. */\n get apiBase(): string {\n // getApiUrl itself, guarded: it dereferences `apis` unchecked, and an environment without them (a test\n // bed, say) means there is no other origin to show files from.\n const apis = this.environment.getEnvironment()?.apis;\n return apis ? (this.environment.getApiUrl('SiteAdmin') ?? '').replace(/\\/+$/, '') : '';\n }\n\n /** The signed-in tenant's id; `null` on the host. */\n get tenantId(): string | null {\n return this.session.getTenant()?.id ?? null;\n }\n\n /** A stored file address as this UI loads it - see `absoluteFileUrl`. */\n toDisplay(url: string | null | undefined): string {\n return absoluteFileUrl(url, this.apiBase, this.tenantId);\n }\n\n /** The inverse of `toDisplay`: an address as it is stored - see `relativeFileUrl`. */\n toStored(url: string | null | undefined): string {\n return relativeFileUrl(url, this.apiBase, this.tenantId);\n }\n}\n","import { Component, Input, OnChanges, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IMAGE_TYPE_OPTIONS } from './models';\nimport { sizedFileUrl } from '../services/site-file-url';\nimport { SiteFileUrlService } from '../services/site-file-url.service';\n\n/**\n * A thumbnail (image) or type icon (anything else) for one file. Site's file containers are publicly\n * readable, so an image is shown straight from its public address (`/api/site-public/files/...`), asked\n * for at the thumbnail's size so the browser does not download the full upload. The address is stored\n * relative; it is shown - and linked - from the `SiteAdmin` API's host (`SiteFileUrlService`).\n */\n@Component({\n selector: 'site-file-preview',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './file-preview.component.html',\n styleUrls: ['./file-preview.component.scss'],\n imports: [CommonModule],\n})\nexport class FilePreviewComponent implements OnChanges {\n private readonly fileUrls = inject(SiteFileUrlService);\n\n @Input() width = '100px';\n /** The file's address: the public read endpoint's, or a local `blob:`/`data:` URL for a file not uploaded yet. */\n @Input() src = '';\n @Input() type = '';\n @Input() name = '';\n @Input() className = '';\n /** Server-side resize for the thumbnail (cropped to fill when both are set). Ignored for a local URL. */\n @Input() resizeWidth?: number;\n @Input() resizeHeight?: number;\n\n isImage = true;\n isAudio = false;\n isVideo = false;\n displaySrc = '';\n /** {@link src} where this UI can reach it - the download link. */\n linkHref = '';\n\n ngOnChanges(): void {\n this.updateFileType();\n this.linkHref = this.fileUrls.toDisplay(this.src);\n this.displaySrc = this.isImage ? sizedFileUrl(this.linkHref, this.resizeWidth, this.resizeHeight) : this.linkHref;\n }\n\n private updateFileType() {\n const fileName = this.name || '';\n const fileType = this.type || '';\n if (!this.type) {\n this.type = fileName.includes('.7z') ? '7z' : '';\n }\n this.isImage = fileType.includes('image/');\n this.isAudio = fileType.includes('audio/');\n this.isVideo = fileType.includes('video/');\n }\n\n /** Falls back to a generic file icon when the type has no dedicated one. */\n getFileIconClass(): string {\n return IMAGE_TYPE_OPTIONS.find(item => item.type === this.type)?.icon || 'fa fa-file-o';\n }\n}\n","<div class=\"image_box\" [style]=\"{ width: width, maxWidth: '100%' }\">\n <a class=\"file-preview-link\" [href]=\"linkHref\" [download]=\"name\" [attr.aria-label]=\"name\">\n @if (isImage) {\n <div class=\"img_box\" [class]=\"className\">\n <img [src]=\"displaySrc\" [alt]=\"name\" />\n </div>\n }\n @if (isAudio) {\n <i class=\"file-type-icon fa fa-file-audio-o fs-4\" aria-hidden=\"true\"></i>\n }\n @if (isVideo) {\n <i class=\"file-type-icon fa fa-file-video-o fs-4\" aria-hidden=\"true\"></i>\n }\n @if (!(isImage||isAudio||isVideo)) {\n <i class=\"file-type-icon fs-4\" [ngClass]=\"getFileIconClass()\" aria-hidden=\"true\"></i>\n }\n </a>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\nconst UNITS = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n@Pipe({\n name: 'formatFileSize',\n standalone: true,\n})\nexport class FormatFileSizePipe implements PipeTransform {\n transform(bytes: number): string {\n let size = bytes;\n let unitIndex = 0;\n while (size >= 1024 && unitIndex < UNITS.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n\n return `${size.toFixed(1)} ${UNITS[unitIndex]}`;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n SimpleChanges,\n ViewChild,\n OnChanges,\n signal,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { DatatableComponent } from '@swimlane/ngx-datatable';\nimport { Confirmation, ConfirmationService, ThemeSharedModule, ToasterService } from '@abp/ng.theme.shared';\nimport {\n PagedResultDto,\n ABP,\n CoreModule,\n ListService,\n LocalizationService,\n LIST_QUERY_DEBOUNCE_TIME,\n} from '@abp/ng.core';\nimport {\n CreateFileInput,\n FileDescriptorDto,\n FileAdminService,\n GetFilesInput,\n} from '../../../proxy/dignite/site/admin/files';\nimport { FormControl, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms';\nimport { finalize } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport {\n DirectoryTreeNode,\n FileDirectoryTreeComponent,\n MY_FILES_NODE_KEY,\n isMyFilesNode,\n} from '../file-directory-tree/file-directory-tree.component';\nimport { FilePreviewComponent } from '../../previews/file-preview.component';\nimport { FormatFileSizePipe } from '../../pipes/format-file-size.pipe';\n\n/** A file mid-upload, tracked alongside its outcome for the status toast. */\ninterface UploadingFile extends File {\n status?: 1 | 2; // 1 = succeeded, 2 = failed (over the size limit, or the request itself failed)\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'site-file-modal',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './file-modal.component.html',\n styleUrls: ['./file-modal.component.scss'],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CoreModule,\n ThemeSharedModule,\n FileDirectoryTreeComponent,\n FilePreviewComponent,\n FormatFileSizePipe,\n ],\n providers: [\n ListService,\n { provide: LIST_QUERY_DEBOUNCE_TIME, useValue: 500 },\n ],\n})\nexport class FileModalComponent implements OnChanges {\n @ViewChild('fileTable') private fileTable?: DatatableComponent<FileDescriptorDto>;\n private tableRecalculationFrame?: number;\n\n // The file list uses the opposite visual convention for sort arrows.\n // Keep the direction sent by ListService unchanged and only swap the icons.\n readonly tableSortIcons = {\n sortAscending: 'datatable-icon-down',\n sortDescending: 'datatable-icon-up',\n };\n\n constructor(\n private fileService: FileAdminService,\n private toaster: ToasterService,\n public readonly list: ListService,\n private confirmation: ConfirmationService,\n private localizationService: LocalizationService,\n ) {}\n\n private loadContainerConfiguration(): void {\n this.fileService.getContainerConfiguration(this.fileContainerName).subscribe(res => {\n this.createDirectoryPermissionName = res?.createDirectoryPermissionName;\n // Reflect the container's actual server-side limit (FileSizeLimitHandler.MaxFileSize) once\n // it's known, instead of leaving the pre-fetch default of 1MB as the permanent client cap.\n if (res?.maxBlobSize > 0) {\n this.sizeLimit = res.maxBlobSize;\n }\n this.scheduleTableRecalculation();\n });\n }\n\n createDirectoryPermissionName = '';\n\n /** No default: an unconfigured container is a caller bug, not implicitly \"Images\". */\n @Input()\n set fileContainerName(v: string) {\n if (v) {\n this._fileContainerName = v;\n }\n }\n get fileContainerName(): string {\n return this._fileContainerName;\n }\n private _fileContainerName = '';\n\n @Input() multiple = false;\n\n sizeLimit = 1048576;\n @Input()\n set limit(v: number) {\n this.sizeLimit = v;\n }\n\n @Input()\n set visible(v: boolean) {\n this.modalOpen = v;\n if (v) {\n this.loadData();\n }\n }\n\n @Output() visibleChange = new EventEmitter<boolean>();\n\n modalOpen = false;\n\n /**\n * The two secondary dialogs' open/busy flags are signals, not plain fields: they are written after an\n * HTTP call returns (rename, move), and bound on `<abp-modal>` elements that sit in this component's own\n * view - under the host layout's OnPush ancestors (`abp-router-outlet`, the LeptonX layouts), where a\n * plain-field write in a response callback never marks the view for check, so the dialog would stay open\n * until some unrelated event happened to. What renders *inside* a dialog (header/body/footer) is attached\n * to the application root by `NgbModal` and refreshed on every tick, so the plain fields it reads\n * (`data`, `uploadingFiles`, `isRenaming`, ...) are not affected.\n */\n readonly fileNameModalOpen = signal(false);\n\n onFileNameModalVisibleChange(visible: boolean): void {\n this.fileNameModalOpen.set(visible);\n if (!visible) {\n this.fileNameForm = undefined;\n this.editingFileRow = undefined;\n }\n }\n\n onModalVisibleChange(visible: boolean): void {\n if (visible) return;\n\n this.modalOpen = false;\n this.visibleChange.emit(visible);\n this.createDirectoryPermissionName = '';\n this.selectedTreeNode = undefined;\n this.selectedFiles = [];\n this.uploadingFiles = [];\n this.onCancelFileNameEdit();\n }\n\n /** Recomputes the table's column widths once the modal has finished its open transition. */\n onModalInit(): void {\n this.scheduleTableRecalculation();\n }\n\n private scheduleTableRecalculation(): void {\n if (!this.modalOpen) return;\n\n if (typeof requestAnimationFrame === 'undefined') {\n setTimeout(() => this.fileTable?.recalculate());\n return;\n }\n\n if (this.tableRecalculationFrame !== undefined) {\n cancelAnimationFrame(this.tableRecalculationFrame);\n }\n\n this.tableRecalculationFrame = requestAnimationFrame(() => {\n this.tableRecalculationFrame = requestAnimationFrame(() => {\n this.tableRecalculationFrame = undefined;\n if (this.modalOpen) {\n this.fileTable?.recalculate();\n }\n });\n });\n }\n\n modalSave(): void {\n if (this.selectedFiles.length === 0) return;\n\n const selected = structuredClone(this.selectedFiles);\n this.selectFilefn.emit(selected);\n this.onModalVisibleChange(false);\n }\n\n selectedTreeNode: DirectoryTreeNode | undefined;\n private hasQueryHook = false;\n\n loadData(): void {\n if (this.modalOpen && this.fileContainerName) {\n this.list.maxResultCount = 50;\n this.loadContainerConfiguration();\n if (!this.hasQueryHook) {\n this.hookToQuery();\n this.hasQueryHook = true;\n } else {\n this.list.get();\n }\n }\n }\n\n /** Flattened directory list from the tree, for the breadcrumb-style path lookups below. */\n private flattenedDirectories: DirectoryTreeNode[] = [];\n\n private getSelectedDirectoryId(): string | undefined {\n const key = this.selectedTreeNode?.key;\n return key && key !== MY_FILES_NODE_KEY ? key : undefined;\n }\n\n onTreeNodeData(nodes: DirectoryTreeNode[]): void {\n this.flattenedDirectories = this.flattenTree(nodes);\n }\n\n private getDirectoryPath(node: { key?: string } | undefined): DirectoryTreeNode[] {\n const path: DirectoryTreeNode[] = [];\n const visitedKeys = new Set<string>();\n let currentKey = node?.key;\n\n while (currentKey && !visitedKeys.has(currentKey)) {\n visitedKeys.add(currentKey);\n const currentNode = this.flattenedDirectories.find(item => item.key === currentKey);\n\n if (!currentNode) break;\n\n path.unshift(currentNode);\n currentKey = currentNode.parentId ?? undefined;\n }\n\n return path;\n }\n\n getFileDirectoryPath(directoryId: string | undefined): string {\n if (!directoryId) return '';\n\n return this.getDirectoryPath({ key: directoryId })\n .map(node => node.name || node.title)\n .filter(Boolean)\n .join(' / ');\n }\n\n private flattenTree(nodes: DirectoryTreeNode[]): DirectoryTreeNode[] {\n const result: DirectoryTreeNode[] = [];\n\n const visit = (items: DirectoryTreeNode[]) => {\n for (const item of items) {\n result.push(item);\n if (item.children?.length) {\n visit(item.children);\n }\n }\n };\n\n visit(nodes);\n return result;\n }\n\n onTreeNodeClick(node: DirectoryTreeNode): void {\n this.filters.skipCount = 0;\n this.selectedTreeNode = node;\n this.list.get();\n }\n\n uploadingFiles: UploadingFile[] = [];\n\n async onFileInputChange(event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []) as UploadingFile[];\n this.uploadingFiles = files;\n // Uploaded one at a time: concurrent creates against the same container can race inside\n // the blob storage provider (e.g. Volo.Abp.BlobStoring.Database) and surface as a spurious\n // AbpDbConcurrencyException (409) on one of the files. Sequential requests avoid that race.\n for (const file of files) {\n if (file.size > this.sizeLimit) {\n this.setUploadStatus(file, 2);\n continue;\n }\n try {\n await this.uploadFile(file);\n this.setUploadStatus(file, 1);\n } catch {\n this.setUploadStatus(file, 2);\n }\n }\n this.list.get();\n const allSucceeded = !this.uploadingFiles.some(file => file.status === 2);\n if (allSucceeded) {\n setTimeout(() => {\n this.uploadingFiles = [];\n }, 4000);\n }\n }\n\n private setUploadStatus(file: UploadingFile, status: UploadingFile['status']): void {\n for (const uploading of this.uploadingFiles) {\n if (uploading === file) uploading.status = status;\n }\n }\n\n private uploadFile(file: File): Promise<FileDescriptorDto> {\n return new Promise((resolve, reject) => {\n const formData = new FormData();\n formData.append('file', file, file.name);\n this.fileService\n .create({\n file: formData as unknown as CreateFileInput['file'],\n containerName: this.fileContainerName,\n directoryId: this.getSelectedDirectoryId() ?? null,\n })\n .subscribe({ next: resolve, error: reject });\n });\n }\n\n data: PagedResultDto<FileDescriptorDto> = {\n items: [],\n totalCount: 0,\n };\n\n filters = {} as GetFilesInput;\n\n @Output() selectFilefn = new EventEmitter<FileDescriptorDto[]>();\n\n private hookToQuery(): void {\n const getData = (query: ABP.PageQueryParams) =>\n this.fileService.getList({\n ...query,\n ...this.filters,\n containerName: this.fileContainerName,\n directoryId: this.getSelectedDirectoryId(),\n });\n const setData = (list: PagedResultDto<FileDescriptorDto>) => {\n this.data = list;\n this.selectedFiles = [];\n this.isAllSelected = false;\n this.scheduleTableRecalculation();\n };\n this.list.hookToQuery(getData).subscribe(setData);\n }\n\n deleteSelectedFiles(): void {\n this.confirmation\n .warn('Site::Files:BatchDeletionConfirmationMessage', 'Site::Files:BatchDeletionConfirmationTitle', {\n messageLocalizationParams: [String(this.selectedFiles.length)],\n })\n .subscribe(async (status: Confirmation.Status) => {\n if (status !== 'confirm') return;\n\n const result = await this.batchDeleteFiles(this.selectedFiles);\n if (result.success) {\n this.toaster.success(result.message);\n } else {\n this.toaster.error(result.message);\n }\n this.list.get();\n });\n }\n\n private async batchDeleteFiles(\n files: FileDescriptorDto[],\n ): Promise<{ success: boolean; message: string }> {\n const results = await Promise.allSettled(\n files.map(\n file =>\n new Promise<void>((resolve, reject) => {\n this.fileService.delete(file.id).subscribe({ next: () => resolve(), error: () => reject(file) });\n }),\n ),\n );\n\n const failedCount = results.filter(result => result.status === 'rejected').length;\n\n return {\n success: failedCount === 0,\n message:\n failedCount === 0\n ? this.localizationService.instant('Site::Files:DeletedSuccessfully')\n : this.localizationService.instant('Site::Files:ItemsFailedToDelete', String(failedCount)),\n };\n }\n\n readonly moveModalOpen = signal(false);\n readonly moveModalBusy = signal(false);\n moveTargetDirectoryNode: DirectoryTreeNode | undefined;\n\n openMoveModal(): void {\n if (this.selectedFiles.length === 0 || !this.createDirectoryPermissionName) return;\n\n this.moveTargetDirectoryNode = undefined;\n this.moveModalOpen.set(true);\n }\n\n onMoveTargetDirectoryChange(node: DirectoryTreeNode): void {\n this.moveTargetDirectoryNode = node;\n }\n\n onMoveModalVisibleChange(visible: boolean): void {\n this.moveModalOpen.set(visible);\n if (!visible) {\n this.moveModalBusy.set(false);\n this.moveTargetDirectoryNode = undefined;\n }\n }\n\n async moveSelectedFiles(): Promise<void> {\n const targetNode = this.moveTargetDirectoryNode;\n if (!targetNode?.key || this.selectedFiles.length === 0 || this.moveModalBusy()) return;\n\n const targetDirectoryId = isMyFilesNode(targetNode) ? null : targetNode.key;\n\n this.moveModalBusy.set(true);\n const results = await Promise.allSettled(\n this.selectedFiles.map(\n file =>\n new Promise<void>((resolve, reject) => {\n this.fileService\n .update(file.id, { directoryId: targetDirectoryId })\n .subscribe({ next: () => resolve(), error: reject });\n }),\n ),\n );\n this.moveModalBusy.set(false);\n\n const failedCount = results.filter(result => result.status === 'rejected').length;\n if (failedCount > 0) {\n this.toaster.error(this.localizationService.instant('Site::Files:MoveFailed'));\n return;\n }\n\n this.toaster.success(this.localizationService.instant('Site::Files:MovedSuccessfully'));\n this.selectedFiles = [];\n this.isAllSelected = false;\n this.list.get();\n this.moveModalOpen.set(false);\n }\n\n closeFileStatusModal(): void {\n this.uploadingFiles = [];\n }\n\n selectedFiles: FileDescriptorDto[] = [];\n isAllSelected = false;\n\n @Input() selectPickerFile: FileDescriptorDto[];\n\n ngOnChanges(changes: SimpleChanges): void {\n const selectPickerFileChange = changes['selectPickerFile'];\n if (!selectPickerFileChange) {\n return;\n }\n\n this.selectedFiles = structuredClone(selectPickerFileChange.currentValue ?? []);\n }\n\n onRowCheckboxChange(event: Event, row: FileDescriptorDto, rows: FileDescriptorDto[]): void {\n const checked = (event.target as HTMLInputElement).checked;\n let selected = [...this.selectedFiles];\n if (this.multiple) {\n if (checked) {\n selected.push(row);\n } else {\n selected = selected.filter(item => item.id !== row.id);\n }\n this.isAllSelected = this.areAllSelected(rows, selected);\n } else {\n selected = checked ? [row] : [];\n }\n this.selectedFiles = this.removeDuplicatesById(selected);\n }\n\n private areAllSelected(rows: FileDescriptorDto[], selected: FileDescriptorDto[] = []): boolean {\n if (rows.length === 0) return false;\n return rows.every(row => selected.some(item => item.id === row.id));\n }\n\n onSelectAllChange(event: Event, rows: FileDescriptorDto[]): void {\n const checked = (event.target as HTMLInputElement).checked;\n this.selectedFiles = checked\n ? this.removeDuplicatesById([...this.selectedFiles, ...rows])\n : this.selectedFiles.filter(item => !rows.some(row => row.id === item.id));\n this.isAllSelected = checked;\n }\n\n isRowSelected = (id: string): boolean => {\n return this.selectedFiles.some(item => item.id === id);\n };\n\n private removeDuplicatesById(files: FileDescriptorDto[]): FileDescriptorDto[] {\n const seenIds = new Set<string>();\n return files.filter(file => {\n if (seenIds.has(file.id)) return false;\n seenIds.add(file.id);\n return true;\n });\n }\n\n /** Editing form, one row at a time - opening a second one replaces it. */\n fileNameForm: FormGroup | undefined;\n editingFileRow: FileDescriptorDto | undefined;\n isRenaming = false;\n\n onSubmitFileName(): void {\n if (!this.fileNameForm?.valid || this.isRenaming) return;\n\n const input = this.fileNameForm.value;\n this.isRenaming = true;\n this.fileService\n .update(input.id, { name: input.fileName })\n .pipe(finalize(() => (this.isRenaming = false)))\n .subscribe(() => {\n const row = this.data.items.find(item => item.id === this.editingFileRow?.id);\n if (row) {\n row.name = input.fileName;\n }\n\n this.fileNameForm = undefined;\n this.editingFileRow = undefined;\n this.fileNameModalOpen.set(false);\n this.toaster.success(this.localizationService.instant('Site::Files:SavedSuccessfully'));\n });\n }\n\n onEditFileName(row: FileDescriptorDto): void {\n this.fileNameForm = new FormGroup({\n fileName: new FormControl(row.name, [Validators.required]),\n id: new FormControl(row.id, [Validators.required]),\n });\n this.editingFileRow = row;\n this.fileNameModalOpen.set(true);\n }\n\n onCancelFileNameEdit(): void {\n this.fileNameModalOpen.set(false);\n this.editingFileRow = undefined;\n this.fileNameForm = undefined;\n }\n}\n","<abp-modal [(visible)]=\"modalOpen\" (visibleChange)=\"onModalVisibleChange($event)\" (init)=\"onModalInit()\"\n [options]=\"{ size: 'xl', scrollable: false, windowClass: 'file-modal-window' }\">\n <ng-template #abpHeader>\n <h3>{{'Site::Files:Files' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n @if (modalOpen) {\n <div class=\"row file-modal-body file-modal\">\n @if (createDirectoryPermissionName) {\n <div class=\"col-3\" style=\"overflow: auto; height: calc(100vh - 240px)\">\n <site-file-directory-tree [theSelectedTreeNode]=\"selectedTreeNode\" (nodeClick)=\"onTreeNodeClick($event)\"\n (treeNodeData)=\"onTreeNodeData($event)\"\n [fileContainerName]=\"fileContainerName\"></site-file-directory-tree>\n </div>\n }\n <div [class]=\"createDirectoryPermissionName ? 'col-9 file-browser-content' : 'col-12 file-browser-content'\">\n <div class=\"mb-3 d-flex justify-content-between align-items-center\">\n <div class=\"file-list-actions d-flex align-items-center gap-3\" style=\"flex: 2\">\n @if (selectedFiles.length > 0) {\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click.stop)=\"deleteSelectedFiles()\"\n [attr.aria-label]=\"'Site::Files:Delete' | abpLocalization\"\n [title]=\"'Site::Files:Delete' | abpLocalization\">\n <i class=\"fa fa-trash\" aria-hidden=\"true\"></i>\n </button>\n @if (createDirectoryPermissionName) {\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click.stop)=\"openMoveModal()\"\n [attr.aria-label]=\"'Site::Files:Move' | abpLocalization\"\n [title]=\"'Site::Files:Move' | abpLocalization\">\n <i class=\"fa fa-folder-open-o\" aria-hidden=\"true\"></i>\n </button>\n }\n }\n </div>\n <div class=\"input-group form-file\" style=\"flex: 2\">\n <input type=\"file\" class=\"form-control\" #fileUploadInput [multiple]=\"true\" (change)=\"onFileInputChange($event)\" />\n </div>\n </div>\n <div class=\"file-table-container\">\n <ngx-datatable #fileTable class=\"material container-height\" [rows]=\"data.items\" [list]=\"list\"\n [cssClasses]=\"tableSortIcons\" columnMode=\"flex\"\n [headerHeight]=\"50\" [footerHeight]=\"50\" rowHeight=\"auto\" [scrollbarV]=\"true\" [scrollbarVDynamic]=\"true\"\n [virtualization]=\"false\"\n [externalPaging]=\"true\" [count]=\"data.totalCount\">\n <ngx-datatable-column [flexGrow]=\"0.6\" prop=\"id\" [sortable]=\"false\" [draggable]=\"false\"\n [resizeable]=\"false\">\n <ng-template ngx-datatable-header-template let-value=\"value\" let-allRowsSelected=\"allRowsSelected\"\n let-selectFn=\"selectFn\">\n @if (multiple) {\n <input type=\"checkbox\" class=\"form-check-input\" [checked]=\"isAllSelected\"\n (change)=\"onSelectAllChange($event,data.items)\" />\n }\n </ng-template>\n <ng-template ngx-datatable-cell-template let-row=\"row\" let-value=\"value\">\n <input type=\"checkbox\" class=\"form-check-input\" [checked]=\"isRowSelected(value)\"\n (change)=\"onRowCheckboxChange($event,row,data.items)\" />\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'Site::Files:FileName' | abpLocalization\" prop=\"name\" [sortable]=\"false\"\n [flexGrow]=\"4\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n <div class=\"file-name-cell\">\n <div class=\"file-name-content\">\n @if (getFileDirectoryPath(row.directoryId)) {\n <div class=\"file-directory-path\" [title]=\"getFileDirectoryPath(row.directoryId)\">\n <i class=\"fa fa-folder-o me-1\" aria-hidden=\"true\"></i>{{ getFileDirectoryPath(row.directoryId) }}\n </div>\n }\n <div>{{ value }}</div>\n </div>\n <div class=\"file-name-preview\" [attr.title]=\"row.name\">\n <site-file-preview [width]=\"'48px'\" [src]=\"row.url\" [resizeWidth]=\"96\" [resizeHeight]=\"96\"\n [name]=\"row.name\" [type]=\"row.mimeType\"></site-file-preview>\n </div>\n </div>\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'Site::Files:FileSize' | abpLocalization\" prop=\"size\" [flexGrow]=\"1.5\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{(value|formatFileSize) }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'Site::Files:CreationTime' | abpLocalization\" prop=\"creationTime\"\n [flexGrow]=\"2\">\n <ng-template let-row=\"row\" let-value=\"value\" ngx-datatable-cell-template>\n {{ value | date : 'short' }}\n </ng-template>\n </ngx-datatable-column>\n <ngx-datatable-column [name]=\"'AbpUi::Edit' | abpLocalization\" [flexGrow]=\"1\" [sortable]=\"false\">\n <ng-template let-row=\"row\" ngx-datatable-cell-template>\n <button type=\"button\" class=\"btn btn-sm btn-secondary p-0\" (click.stop)=\"onEditFileName(row)\"\n [attr.aria-label]=\"'AbpUi::Edit' | abpLocalization\">\n <i class=\"fas fa-edit p-2\" aria-hidden=\"true\"></i>\n </button>\n </ng-template>\n </ngx-datatable-column>\n </ngx-datatable>\n </div>\n @if (uploadingFiles.length > 0) {\n <div\n class=\"position-fixed bottom-0 end-0 shadow-lg file-status-modal m-5\" style=\"border-radius: 10px\">\n <div class=\"card p-1\">\n <div class=\"card-header d-flex align-items-center justify-content-between p-0 py-1 border-bottom\">\n <div>{{'Site::Files:UploadFiles' | abpLocalization}}</div>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click.stop)=\"closeFileStatusModal()\"></button>\n </div>\n <div class=\"card-body\">\n <table class=\"table\">\n <thead>\n <tr>\n <th scope=\"col\">{{'Site::Files:FileName' | abpLocalization}}</th>\n <th scope=\"col\">{{'Site::Files:FileSize' | abpLocalization}}</th>\n <th scope=\"col\"></th>\n </tr>\n </thead>\n <tbody>\n @for (item of uploadingFiles; track item; let i = $index) {\n <tr>\n <th scope=\"row\">\n <div>{{ item.name }}</div>\n @if (item.size > sizeLimit) {\n <div class=\"form-text text-danger\">\n {{'Site::Files:ExceedsMaximumSize' |\n abpLocalization:(sizeLimit|formatFileSize)}}\n </div>\n }\n </th>\n <td>{{ item.size | formatFileSize }}</td>\n <td>\n @if (item.status === 1) {\n <i class=\"fas fa-check text-primary\"></i>\n }\n @if (item.status === 2) {\n <i class=\"fas fa-times-circle text-danger\"></i>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-outline-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"selectedFiles.length === 0\" (click)=\"modalSave()\">\n <span>{{'Site::Files:Confirm' | abpLocalization}}</span>\n <span class=\"selected-file-count\" [class.d-none]=\"selectedFiles.length === 0\">\n ({{selectedFiles.length}})\n </span>\n </abp-button>\n </ng-template>\n </abp-modal>\n\n <abp-modal [(visible)]=\"fileNameModalOpen\" (visibleChange)=\"onFileNameModalVisibleChange($event)\">\n <ng-template #abpHeader>\n <h3>{{'AbpUi::Edit' | abpLocalization}} {{'Site::Files:FileName' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n @if (fileNameForm) {\n <form id=\"file-name-edit-form\" [formGroup]=\"fileNameForm\" (ngSubmit)=\"onSubmitFileName()\">\n <div class=\"mb-3\">\n <label class=\"form-label\" for=\"file-name-edit-input\">\n {{'Site::Files:FileName' | abpLocalization}}\n </label>\n <input id=\"file-name-edit-input\" class=\"form-control\" type=\"text\" formControlName=\"fileName\" />\n </div>\n </form>\n }\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"onCancelFileNameEdit()\">\n {{'AbpUi::Cancel' | abpLocalization}}\n </button>\n <button type=\"submit\" class=\"btn btn-primary\" form=\"file-name-edit-form\"\n [disabled]=\"isRenaming || fileNameForm?.invalid\">\n @if (isRenaming) {\n <i class=\"fa-spin fa fa-spinner me-1\" aria-hidden=\"true\"></i>\n }\n {{'AbpUi::Save' | abpLocalization}}\n </button>\n </ng-template>\n </abp-modal>\n\n <abp-modal [(visible)]=\"moveModalOpen\" [busy]=\"moveModalBusy()\"\n (visibleChange)=\"onMoveModalVisibleChange($event)\">\n <ng-template #abpHeader>\n <h3>{{'Site::Files:Move' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n @if (moveModalOpen()) {\n <div class=\"move-directory-tree\">\n <site-file-directory-tree [theSelectedTreeNode]=\"moveTargetDirectoryNode\"\n (nodeClick)=\"onMoveTargetDirectoryChange($event)\" [fileContainerName]=\"fileContainerName\">\n </site-file-directory-tree>\n </div>\n }\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\n {{'AbpUi::Cancel' | abpLocalization}}\n </button>\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"moveModalBusy() || !moveTargetDirectoryNode\"\n (click)=\"moveSelectedFiles()\">\n @if (moveModalBusy()) {\n <i class=\"fa-spin fa fa-spinner me-1\" aria-hidden=\"true\"></i>\n }\n {{'AbpUi::Save' | abpLocalization}}\n </button>\n </ng-template>\n </abp-modal>\n","/* eslint-disable @angular-eslint/component-selector */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CoreModule } from '@abp/ng.core';\nimport { FileModalComponent } from '../file-modal/file-modal.component';\nimport { FormatFileSizePipe } from '../../pipes/format-file-size.pipe';\nimport { FilePreviewComponent } from '../../previews/file-preview.component';\nimport { FileDescriptorDto } from '../../../proxy/dignite/site/admin/files';\n\n@Component({\n selector: 'site-file-picker',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './file-picker.component.html',\n styleUrls: ['./file-picker.component.scss'],\n imports: [\n CoreModule,\n DragDropModule,\n FileModalComponent,\n FilePreviewComponent,\n FormatFileSizePipe,\n ],\n})\nexport class FilePickerComponent implements OnChanges {\n @Input() multiple = false;\n\n /** No default: a caller that never specifies a container has a configuration bug, not an \"Images\" one. */\n @Input() fileContainerName = '';\n\n @Input() selectFormFile: FileDescriptorDto[] = [];\n\n @Output() selectedFileChange = new EventEmitter<FileDescriptorDto[]>();\n\n /** This component's single source of truth; also passed straight to the modal to reselect what's already picked. */\n fileShowTable: FileDescriptorDto[] = [];\n\n modalOpen = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n const selectFormFileChange = changes['selectFormFile'];\n if (selectFormFileChange?.currentValue?.length > 0) {\n this.fileShowTable = selectFormFileChange.currentValue;\n }\n }\n\n onSelectFile(files: FileDescriptorDto[]): void {\n this.fileShowTable = structuredClone(files);\n this.selectedFileChange.emit(this.fileShowTable);\n }\n\n deleteFileTableItem(index: number): void {\n this.fileShowTable.splice(index, 1);\n this.selectedFileChange.emit(this.fileShowTable);\n }\n\n drop(event: CdkDragDrop<FileDescriptorDto[]>): void {\n moveItemInArray(this.fileShowTable, event.previousIndex, event.currentIndex);\n this.selectedFileChange.emit(this.fileShowTable);\n }\n}\n","@if (fileContainerName) {\n <button class=\"btn btn-sm btn-dark soft ms-2 float-end\" type=\"button\"\n (click.stop)=\"modalOpen = true\">{{'Site::Files:SelectFile' | abpLocalization}}</button>\n\n <site-file-modal [(visible)]=\"modalOpen\" [selectPickerFile]=\"fileShowTable\" [multiple]=\"multiple\"\n (selectFilefn)=\"onSelectFile($event)\" [fileContainerName]=\"fileContainerName\"></site-file-modal>\n @if (fileShowTable.length>0) {\n <table class=\"table\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n <thead>\n <tr>\n <th scope=\"col\" style=\"width: 50px;\">{{'Site::Files:RowNumber' | abpLocalization}}</th>\n <th scope=\"col\">{{'Site::Files:FileName' | abpLocalization}}</th>\n <th scope=\"col\" style=\"width: 120px;\">{{'Site::Files:FileSize' | abpLocalization}}</th>\n <th scope=\"col\" style=\"width: 50px;\"></th>\n </tr>\n </thead>\n <tbody>\n @for (item of fileShowTable; track item; let i = $index) {\n <tr cdkDrag cdkDragLockAxis=\"y\" [cdkDragData]=\"item\">\n <td>{{ i + 1 }}</td>\n <td>\n <div class=\"d-flex\">\n <div class=\"flex-grow-1 file-name-drag-handle\" cdkDragHandle\n [title]=\"'Site::Files:DragFileNameToReorder' | abpLocalization\"\n [attr.aria-label]=\"'Site::Files:DragFileNameToReorder' | abpLocalization\">\n <div>{{ item.name }}</div>\n </div>\n <div class=\"\" [attr.title]=\"item.name\">\n <site-file-preview [width]=\"'60px'\" [src]=\"item.url\" [resizeWidth]=\"120\" [resizeHeight]=\"120\"\n [name]=\"item.name\" [type]=\"item.mimeType\"></site-file-preview>\n </div>\n </div>\n </td>\n <td>{{(item.size)|formatFileSize}}</td>\n <td>\n <button class=\"btn btn-sm btn-outline-secondary p-0\" (click.stop)=\"deleteFileTableItem(i)\">\n <i class=\"fas fa-trash p-2\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n } @else {\n <div class=\"no-file-hint text-muted small mt-2\">{{ 'Site::Files:NoFileSelected' | abpLocalization }}</div>\n }\n} @else {\n <div class=\"alert alert-warning py-2 px-3 mb-0\">\n {{ 'Site::Files:ContainerNotConfigured' | abpLocalization }}\n </div>\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CoreModule } from '@abp/ng.core';\nimport { AbstractControl, ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';\nimport { FieldTypeControlBase } from '@dignite/ng.flex-fields';\nimport { FilePickerComponent } from '../../files/components/file-picker/file-picker.component';\nimport { FILE_FIELD_CONFIGURATION_NAMES, FileFieldConfiguration } from './file-configuration';\n\n/** Edits a file field's value: picks one or more files from Site's file library. */\n@Component({\n selector: 'site-file-control',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './file-control.component.html',\n imports: [CommonModule, CoreModule, ReactiveFormsModule, FilePickerComponent],\n})\nexport class FileControlComponent extends FieldTypeControlBase {\n get multiple(): boolean {\n return !!this.fieldValue?.field.configuration[FILE_FIELD_CONFIGURATION_NAMES.uploadFileMultiple];\n }\n\n get containerName(): string {\n return (this.fieldValue?.field.configuration[FILE_FIELD_CONFIGURATION_NAMES.fileContainerName] as string) ?? '';\n }\n\n /** No fallback container: an unconfigured field is a misconfiguration to surface, not paper over. */\n get isContainerConfigured(): boolean {\n return this.containerName.length > 0;\n }\n\n protected configurationDefaults(): object {\n return new FileFieldConfiguration();\n }\n\n protected createControl(): AbstractControl {\n const validators: ValidatorFn[] = [];\n\n if (this.fieldValue!.required) {\n validators.push(Validators.required);\n }\n\n const stored = Array.isArray(this.selectedValue) ? this.selectedValue : [];\n\n return this.fb.control(stored, validators);\n }\n\n onSelectedFileChange(files: unknown[]): void {\n this.fieldControl?.setValue(files);\n }\n}\n","<div [formGroup]=\"entityForm\">\n <div [formGroupName]=\"parentField\">\n <label class=\"form-label\" *ngIf=\"fieldValue.field.displayName\">\n {{ fieldValue.field.displayName }}\n </label>\n @if (isContainerConfigured) {\n <site-file-picker\n [selectFormFile]=\"fieldControl?.value\"\n [multiple]=\"multiple\"\n [fileContainerName]=\"containerName\"\n (selectedFileChange)=\"onSelectedFileChange($event)\"\n />\n } @else {\n <div class=\"alert alert-warning py-2 px-3 mb-0\">\n {{ 'FlexFieldsSite::File:ContainerNotConfigured' | abpLocalization }}\n </div>\n }\n <small class=\"form-text text-muted d-block\" *ngIf=\"fieldValue.field.description\">\n {{ fieldValue.field.description }}\n </small>\n </div>\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CoreModule } from '@abp/ng.core';\nimport { FlexFieldValue } from '@dignite/ng.flex-fields';\nimport { FilePreviewComponent } from '../../files/previews/file-preview.component';\n\n/** The part of a picked file the view reads - what the picker denormalized into the value. */\ninterface FileFieldFileValue {\n url?: string;\n name?: string;\n mimeType?: string;\n}\n\n/** Displays a file field's value read-only: the first file's preview, plus a count. */\n@Component({\n selector: 'site-file-view',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './file-view.component.html',\n imports: [CoreModule, FilePreviewComponent],\n})\nexport class FileViewComponent {\n /** Renders bare, without the label wrapper, for use inside a table cell. */\n @Input() showInList = false;\n\n @Input() fields?: FlexFieldValue;\n\n /** Registration key of the field type (`FileExplorer`). */\n @Input() type?: string;\n\n @Input() value: unknown = '';\n\n get files(): FileFieldFileValue[] {\n return Array.isArray(this.value) ? this.value : [];\n }\n}\n","@if (showInList) {\n @if (files.length > 0) {\n <div class=\"d-flex align-items-center\">\n <site-file-preview\n width=\"60px\"\n className=\"overflow-hidden me-1\"\n [src]=\"files[0].url ?? ''\"\n [resizeWidth]=\"120\"\n [resizeHeight]=\"120\"\n [name]=\"files[0].name ?? ''\"\n [type]=\"files[0].mimeType ?? ''\"\n />\n @if (files.length - 1 > 0) {\n <span>+{{ files.length - 1 }}</span>\n }\n </div>\n } @else {\n <span>—</span>\n }\n} @else {\n <div class=\"mb-3\">\n @if (fields?.field?.displayName) {\n <label class=\"form-label\">{{ fields?.field?.displayName }}</label>\n }\n @if (files.length > 0) {\n <div class=\"d-flex align-items-center\">\n <site-file-preview\n width=\"60px\"\n className=\"overflow-hidden me-1\"\n [src]=\"files[0].url ?? ''\"\n [resizeWidth]=\"120\"\n [resizeHeight]=\"120\"\n [name]=\"files[0].name ?? ''\"\n [type]=\"files[0].mimeType ?? ''\"\n />\n @if (files.length - 1 > 0) {\n <span>+{{ files.length - 1 }}</span>\n }\n </div>\n } @else {\n <div>—</div>\n }\n </div>\n}\n","import type { FieldTypeDefinition } from '@dignite/ng.flex-fields';\nimport { FileConfigComponent } from './file-config.component';\nimport { FileControlComponent } from './file-control.component';\nimport { FileViewComponent } from './file-view.component';\n\n/**\n * The registration key. **Persisted data** (every field definition of this type, Matrix block\n * configurations included) - unchanged from when the field type was `Dignite.Abp.FlexFields`'; must equal\n * the server's `FileFieldType.ControlName`.\n */\nexport const FILE_FIELD_TYPE_NAME = 'FileExplorer';\n\n/**\n * The file field type: picks one or more files from Site's file library. Registered by `provideSite()`\n * like `Seo` and `Content` - the client has no equivalent of the server's DI discovery.\n *\n * **No search component.** `FileFieldType.IndexValueType` is null - the value is an array of file\n * objects with no typed index column to project into.\n */\nexport const FILE_FIELD_TYPE: FieldTypeDefinition = {\n name: FILE_FIELD_TYPE_NAME,\n displayNameKey: 'FlexFieldsSite::FieldType:File',\n configComponent: FileConfigComponent,\n controlComponent: FileControlComponent,\n viewComponent: FileViewComponent,\n};\n","/**\n * Configuration of a `Seo` field, shaped for `FormBuilder.group()`. Mirrors `SeoConfiguration`\n * (`src/Dignite.Site.Domain/Seo/SeoConfiguration.cs`).\n *\n * The property names are the **stored** configuration keys, not a naming choice.\n *\n * Both limits are **advisory**. `SeoFieldType.Validate` does not reject an over-length value, because a\n * search engine truncates an over-long title or description rather than rejecting it. They are a\n * threshold for an editing UI (or AI-generated content) to aim for, so the control renders them as a\n * counter and never as a `Validators.maxLength`.\n */\nexport class SeoConfiguration {\n /** 60 - Google's practical truncation point for a search result title. */\n 'Seo.MetaTitleCharLimit': unknown = [60];\n\n /** 160 - the conventional SERP snippet length. */\n 'Seo.MetaDescriptionCharLimit': unknown = [160];\n}\n","import { CoreModule } from '@abp/ng.core';\nimport { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FieldTypeConfigBase } from '@dignite/ng.flex-fields';\nimport { SeoConfiguration } from './seo-configuration';\n\n/**\n * Designer-side editor for a `Seo` field's configuration: the two advisory character limits.\n *\n * They are thresholds the value editor counts against, not validation - see {@link SeoConfiguration}.\n */\n@Component({\n selector: 'site-seo-config',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './seo-config.component.html',\n imports: [CoreModule, ReactiveFormsModule],\n})\nexport class SeoConfigComponent extends FieldTypeConfigBase {\n protected configurationDefaults(): object {\n return new SeoConfiguration();\n }\n}\n","<form [formGroup]=\"formEntity\">\n <div formGroupName=\"configuration\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{ 'FlexFieldsSite::Seo:MetaTitleCharLimit' | abpLocalization }}</label>\n <input type=\"number\" class=\"form-control\" formControlName=\"Seo.MetaTitleCharLimit\" min=\"1\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{ 'FlexFieldsSite::Seo:MetaDescriptionCharLimit' | abpLocalization }}</label>\n <input\n type=\"number\"\n class=\"form-control\"\n formControlName=\"Seo.MetaDescriptionCharLimit\"\n min=\"1\"\n />\n </div>\n <div class=\"alert alert-light border py-2 mb-0\">\n <small class=\"text-muted\">{{ 'FlexFieldsSite::Seo:CharLimitAdvisoryHint' | abpLocalization }}</small>\n </div>\n </div>\n</form>\n","/**\n * How wide a title or a description is in a search result, in columns: a Chinese, Japanese or Korean character\n * takes two, any other one. A result is limited by width, not by characters, and the SEO field's limits are in\n * columns. The same rule as `SeoTextWidth` on the server.\n */\nexport function seoTextColumns(text: string | null | undefined): number {\n let columns = 0;\n for (const character of text ?? '') {\n columns += isWide(character.codePointAt(0) ?? 0) ? 2 : 1;\n }\n return columns;\n}\n\nfunction isWide(c: number): boolean {\n return (\n (c >= 0x1100 && c <= 0x115f) ||\n (c >= 0x2e80 && c <= 0x303e) ||\n (c >= 0x3041 && c <= 0x33ff) ||\n (c >= 0x3400 && c <= 0x4dbf) ||\n (c >= 0x4e00 && c <= 0x9fff) ||\n (c >= 0xa000 && c <= 0xa4cf) ||\n (c >= 0xac00 && c <= 0xd7a3) ||\n (c >= 0xf900 && c <= 0xfaff) ||\n (c >= 0xfe30 && c <= 0xfe4f) ||\n (c >= 0xff00 && c <= 0xff60) ||\n (c >= 0xffe0 && c <= 0xffe6) ||\n (c >= 0x20000 && c <= 0x2fffd) ||\n (c >= 0x30000 && c <= 0x3fffd)\n );\n}\n","/**\n * Where the share image is picked from and the size it is shared at (GitHub issue #72).\n *\n * The container mirrors `SiteFileContainerNames.Images` on the server - fixed, not a field setting: the\n * share image is always a picture, and `images` is the container whose policy is pictures only.\n * The size mirrors `OpenGraphConsts`: the server emits a file-library `og:image` cropped to exactly\n * this, so previewing it at the same crop shows the editor what a shared link will look like.\n */\nexport const OG_IMAGE_CONTAINER_NAME = 'images';\n\nexport const OG_IMAGE_WIDTH = 1200;\n\nexport const OG_IMAGE_HEIGHT = 630;\n","import { CoreModule } from '@abp/ng.core';\nimport { Component, ChangeDetectionStrategy } from '@angular/core';\nimport {\n AbstractControl,\n ReactiveFormsModule,\n UntypedFormControl,\n UntypedFormGroup,\n} from '@angular/forms';\nimport { FieldTypeControlBase } from '@dignite/ng.flex-fields';\nimport { FileModalComponent } from '../../files/components/file-modal/file-modal.component';\nimport { FilePreviewComponent } from '../../files/previews/file-preview.component';\nimport type { FileDescriptorDto } from '../../proxy/dignite/site/admin/files';\nimport { seoTextColumns } from './seo-text-width';\nimport { SeoConfiguration } from './seo-configuration';\nimport type { SeoFieldValue } from './seo-field-value';\nimport { OG_IMAGE_CONTAINER_NAME, OG_IMAGE_HEIGHT, OG_IMAGE_WIDTH } from './seo-og-image';\n\n/**\n * Edits the value of a `Seo` field.\n *\n * Unlike every built-in field type, this binds a **`FormGroup`** rather than a single control: the\n * value is a composite object, and the group's shape is exactly `SeoFieldValue`, so what the form\n * produces round-trips back to the server unchanged.\n *\n * **No sub-field is individually required, even when the field usage is.** The server's\n * `SeoFieldType.Validate` only rejects a *missing bundle*; SEO fields are supplementary and the\n * platform falls back to defaults for whatever is left blank (总体设计 §5.3). Since a `FormGroup`\n * always produces an object, a required Seo field is satisfied by being rendered at all - adding\n * `Validators.required` to the parts would enforce something the server does not.\n *\n * **The share image is picked, not typed** (GitHub issue #72): the file library's modal, fixed to the\n * `images` container, uploads or selects one file and its `url` is what `ogImage` stores - still a\n * plain string, so a value an MCP client wrote (an external address included) shows and can be replaced\n * or removed the same way.\n */\n@Component({\n selector: 'site-seo-control',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './seo-control.component.html',\n imports: [CoreModule, ReactiveFormsModule, FileModalComponent, FilePreviewComponent],\n})\nexport class SeoControlComponent extends FieldTypeControlBase {\n readonly ogImageContainerName = OG_IMAGE_CONTAINER_NAME;\n readonly ogImageWidth = OG_IMAGE_WIDTH;\n readonly ogImageHeight = OG_IMAGE_HEIGHT;\n\n ogImagePickerOpen = false;\n\n protected configurationDefaults(): object {\n return new SeoConfiguration();\n }\n\n /**\n * Untyped on purpose. `FieldTypeControlBase.createControl` is declared to return\n * `AbstractControl<any, any, any>`, and a typed `FormGroup<{...}>` is not assignable to it - typed\n * forms fix `TRawValue` to the group's own shape. Every built-in field type returns a single\n * control, so this is the first one to hit it.\n */\n protected createControl(): AbstractControl {\n const value = this.currentValue();\n\n return new UntypedFormGroup({\n metaTitle: new UntypedFormControl(value.metaTitle ?? ''),\n metaDescription: new UntypedFormControl(value.metaDescription ?? ''),\n ogImage: new UntypedFormControl(value.ogImage ?? ''),\n noIndex: new UntypedFormControl(value.noIndex ?? false),\n });\n }\n\n /** The bound group, for the template's counters. */\n get seoGroup(): UntypedFormGroup | null {\n return this.fieldControl as UntypedFormGroup | null;\n }\n\n /** The stored share image address, or '' when there is none. */\n get ogImage(): string {\n return String(this.seoGroup?.get('ogImage')?.value ?? '');\n }\n\n onOgImagePicked(files: FileDescriptorDto[]): void {\n const url = files[0]?.url;\n if (url) {\n this.setOgImage(url);\n }\n }\n\n removeOgImage(): void {\n this.setOgImage('');\n }\n\n /** In columns, as the limits are: a Chinese, Japanese or Korean character takes two (seoTextColumns). */\n get metaTitleLength(): number {\n return seoTextColumns(String(this.seoGroup?.get('metaTitle')?.value ?? ''));\n }\n\n get metaDescriptionLength(): number {\n return seoTextColumns(String(this.seoGroup?.get('metaDescription')?.value ?? ''));\n }\n\n get metaTitleCharLimit(): number {\n return Number(this.fieldValue?.field.configuration['Seo.MetaTitleCharLimit'] ?? 60);\n }\n\n get metaDescriptionCharLimit(): number {\n return Number(this.fieldValue?.field.configuration['Seo.MetaDescriptionCharLimit'] ?? 160);\n }\n\n private setOgImage(url: string): void {\n const control = this.seoGroup?.get('ogImage');\n control?.setValue(url);\n control?.markAsDirty();\n }\n\n /**\n * A fresh value is a live object; one that has round-tripped through storage arrives as parsed JSON.\n * Anything else - the base class seeds `''` when there is no value - means \"nothing stored yet\".\n */\n private currentValue(): Partial<SeoFieldValue> {\n const value = this.selectedValue;\n return value && typeof value === 'object' ? (value as Partial<SeoFieldValue>) : {};\n }\n}\n","<div [formGroup]=\"entityForm\">\n <div [formGroupName]=\"parentField\">\n <fieldset class=\"mb-3\" [formGroupName]=\"fieldValue.field.name\">\n <legend class=\"form-label h6\" *ngIf=\"fieldValue.field.displayName\">\n {{ fieldValue.field.displayName }}\n </legend>\n <small class=\"form-text text-muted d-block mb-2\" *ngIf=\"fieldValue.field.description\">\n {{ fieldValue.field.description }}\n </small>\n\n <div class=\"mb-3\">\n <label class=\"form-label\" [for]=\"fieldValue.field.name + '-meta-title'\">\n {{ 'FlexFieldsSite::Seo:MetaTitle' | abpLocalization }}\n </label>\n <input\n type=\"text\"\n class=\"form-control\"\n formControlName=\"metaTitle\"\n [id]=\"fieldValue.field.name + '-meta-title'\"\n />\n <small\n class=\"form-text d-block\"\n [class.text-muted]=\"metaTitleLength <= metaTitleCharLimit\"\n [class.text-warning]=\"metaTitleLength > metaTitleCharLimit\"\n >\n {{ metaTitleLength }} / {{ metaTitleCharLimit }}\n <ng-container *ngIf=\"metaTitleLength > metaTitleCharLimit\">\n — {{ 'FlexFieldsSite::Seo:OverCharLimitHint' | abpLocalization }}\n </ng-container>\n </small>\n </div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\" [for]=\"fieldValue.field.name + '-meta-description'\">\n {{ 'FlexFieldsSite::Seo:MetaDescription' | abpLocalization }}\n </label>\n <textarea\n class=\"form-control\"\n formControlName=\"metaDescription\"\n rows=\"3\"\n [id]=\"fieldValue.field.name + '-meta-description'\"\n ></textarea>\n <small\n class=\"form-text d-block\"\n [class.text-muted]=\"metaDescriptionLength <= metaDescriptionCharLimit\"\n [class.text-warning]=\"metaDescriptionLength > metaDescriptionCharLimit\"\n >\n {{ metaDescriptionLength }} / {{ metaDescriptionCharLimit }}\n <ng-container *ngIf=\"metaDescriptionLength > metaDescriptionCharLimit\">\n — {{ 'FlexFieldsSite::Seo:OverCharLimitHint' | abpLocalization }}\n </ng-container>\n </small>\n </div>\n\n <div class=\"mb-3\">\n <label class=\"form-label d-block\">\n {{ 'FlexFieldsSite::Seo:OgImage' | abpLocalization }}\n </label>\n @if (ogImage) {\n <div class=\"mb-2\">\n <site-file-preview\n width=\"240px\"\n type=\"image/*\"\n [src]=\"ogImage\"\n [name]=\"'FlexFieldsSite::Seo:OgImage' | abpLocalization\"\n [resizeWidth]=\"ogImageWidth\"\n [resizeHeight]=\"ogImageHeight\"\n ></site-file-preview>\n </div>\n }\n <div>\n <button type=\"button\" class=\"btn btn-sm btn-outline-primary\" (click)=\"ogImagePickerOpen = true\">\n <i class=\"fa fa-image me-1\" aria-hidden=\"true\"></i>\n {{ 'FlexFieldsSite::Seo:SelectOgImage' | abpLocalization }}\n </button>\n @if (ogImage) {\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary ms-2\" (click)=\"removeOgImage()\">\n <i class=\"fa fa-trash me-1\" aria-hidden=\"true\"></i>\n {{ 'FlexFieldsSite::Seo:RemoveOgImage' | abpLocalization }}\n </button>\n }\n </div>\n <small class=\"form-text text-muted d-block\">\n {{ 'FlexFieldsSite::Seo:OgImageHint' | abpLocalization }}\n </small>\n <site-file-modal\n [(visible)]=\"ogImagePickerOpen\"\n [multiple]=\"false\"\n [fileContainerName]=\"ogImageContainerName\"\n (selectFilefn)=\"onOgImagePicked($event)\"\n ></site-file-modal>\n </div>\n\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n class=\"form-check-input\"\n formControlName=\"noIndex\"\n [id]=\"fieldValue.field.name + '-no-index'\"\n />\n <label class=\"form-check-label\" [for]=\"fieldValue.field.name + '-no-index'\">\n {{ 'FlexFieldsSite::Seo:NoIndex' | abpLocalization }}\n </label>\n <small class=\"form-text text-muted d-block\">\n {{ 'FlexFieldsSite::Seo:NoIndexHint' | abpLocalization }}\n </small>\n </div>\n </fieldset>\n </div>\n</div>\n","import { CoreModule } from '@abp/ng.core';\nimport { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport type { FlexFieldValue } from '@dignite/ng.flex-fields';\nimport { FilePreviewComponent } from '../../files/previews/file-preview.component';\nimport type { SeoFieldValue } from './seo-field-value';\nimport { OG_IMAGE_HEIGHT, OG_IMAGE_WIDTH } from './seo-og-image';\n\n/**\n * Displays the value of a `Seo` field read-only.\n *\n * In a list cell there is room for one thing, so it shows the meta title and flags `noindex` - the one\n * part of the bundle with a platform-recognized consequence.\n */\n@Component({\n selector: 'site-seo-view',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './seo-view.component.html',\n imports: [CoreModule, FilePreviewComponent],\n})\nexport class SeoViewComponent {\n readonly ogImageWidth = OG_IMAGE_WIDTH;\n readonly ogImageHeight = OG_IMAGE_HEIGHT;\n\n /** Renders bare, without the label wrapper, for use inside a table cell. */\n @Input() showInList = false;\n\n @Input() fields?: FlexFieldValue;\n\n /** Registration key of the field type - always `Seo` here. */\n @Input() type?: string;\n\n @Input() value: unknown = '';\n\n get seo(): SeoFieldValue {\n return this.value && typeof this.value === 'object' ? (this.value as SeoFieldValue) : {};\n }\n\n get hasValue(): boolean {\n const { metaTitle, metaDescription, ogImage, noIndex } = this.seo;\n return !!(metaTitle || metaDescription || ogImage || noIndex);\n }\n}\n","@if (showInList) {\n @if (hasValue) {\n <span>{{ seo.metaTitle || ('FlexFieldsSite::Seo:NoMetaTitle' | abpLocalization) }}</span>\n @if (seo.noIndex) {\n <span class=\"badge bg-warning text-dark ms-1\">{{ 'FlexFieldsSite::Seo:NoIndex' | abpLocalization }}</span>\n }\n } @else {\n ---\n }\n} @else {\n <div class=\"mb-3\">\n <label class=\"form-label\" *ngIf=\"fields?.field?.displayName\">\n {{ fields.field.displayName }}\n </label>\n <dl class=\"row mb-0\">\n <dt class=\"col-sm-4\">{{ 'FlexFieldsSite::Seo:MetaTitle' | abpLocalization }}</dt>\n <dd class=\"col-sm-8\">{{ seo.metaTitle || '---' }}</dd>\n <dt class=\"col-sm-4\">{{ 'FlexFieldsSite::Seo:MetaDescription' | abpLocalization }}</dt>\n <dd class=\"col-sm-8\">{{ seo.metaDescription || '---' }}</dd>\n <dt class=\"col-sm-4\">{{ 'FlexFieldsSite::Seo:OgImage' | abpLocalization }}</dt>\n <dd class=\"col-sm-8\">\n @if (seo.ogImage) {\n <site-file-preview\n width=\"160px\"\n type=\"image/*\"\n [src]=\"seo.ogImage\"\n [name]=\"'FlexFieldsSite::Seo:OgImage' | abpLocalization\"\n [resizeWidth]=\"ogImageWidth\"\n [resizeHeight]=\"ogImageHeight\"\n ></site-file-preview>\n } @else {\n ---\n }\n </dd>\n <dt class=\"col-sm-4\">{{ 'FlexFieldsSite::Seo:NoIndex' | abpLocalization }}</dt>\n <dd class=\"col-sm-8\">\n {{ (seo.noIndex ? 'AbpUi::Yes' : 'AbpUi::No') | abpLocalization }}\n </dd>\n </dl>\n </div>\n}\n","import type { FieldTypeDefinition } from '@dignite/ng.flex-fields';\nimport { SeoConfigComponent } from './seo-config.component';\nimport { SeoControlComponent } from './seo-control.component';\nimport { SeoViewComponent } from './seo-view.component';\n\n/** The registration key. Must equal `SeoFieldNames.FieldTypeName` on the server. */\nexport const SEO_FIELD_TYPE_NAME = 'Seo';\n\n/**\n * Site's seventh field type, alongside the six the flex-fields library ships. The server registers\n * `SeoFieldType` through DI automatically; the client has no equivalent discovery, so it is registered\n * here and wired in through `provideSite()`.\n *\n * This is not optional wiring: `seo` is a platform-preset seeded field, so a fresh install already has\n * one. Without this registration `FieldTypeResolver.get('Seo')` throws and both the field designer and\n * the content editor break on first use.\n *\n * **No search component.** `SeoFieldType.IndexValueType` is null - the value is a composite object with\n * no typed index column to project into - so a `Seo` field can never be searched and must not offer a\n * filter control.\n *\n * `displayNameKey` reads `FlexFieldsSite::...`, not `Site::...`: `SeoFieldType` moved from\n * `Dignite.Site.Domain` into `Dignite.FlexFields.Site` alongside Content/Matrix/Table (GitHub issue\n * #49), and its `LocalizationResource` moved with it.\n */\nexport const SEO_FIELD_TYPE: FieldTypeDefinition = {\n name: SEO_FIELD_TYPE_NAME,\n displayNameKey: 'FlexFieldsSite::FieldType:Seo',\n configComponent: SeoConfigComponent,\n controlComponent: SeoControlComponent,\n viewComponent: SeoViewComponent,\n};\n","import { Injectable } from '@angular/core';\n\n/**\n * Creates a short-lived object URL for a Blob so previews can reference the\n * browser-managed blob instead of holding a base64 copy in memory. Callers own\n * the returned URL and must revoke it (URL.revokeObjectURL) when it is no longer\n * needed to avoid leaking the underlying blob.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ObjectUrlService {\n get(file: Blob): string {\n return URL.createObjectURL(file);\n }\n}\n","/* eslint-disable @angular-eslint/component-selector */\nimport { Component, ElementRef, EventEmitter, Input, OnDestroy, Output, ViewChild, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { ObjectUrlService } from '../../services/object-url.service';\nimport { FormatFileSizePipe } from '../../pipes/format-file-size.pipe';\nimport { CoreModule } from '@abp/ng.core';\nimport { FilePreviewComponent } from '../../previews/file-preview.component';\nimport { FileAdminService } from '../../../proxy/dignite/site/admin/files';\n\n/** A locally-picked `File` awaiting upload, or an already-uploaded file passed in via `fileData`. */\ninterface UploadTableItem {\n id?: string;\n name?: string;\n size: number;\n type?: string;\n fileSize?: string;\n src?: string;\n}\n\nexport interface FileUploadChangeEvent {\n theFilesToBeUploaded: UploadTableItem[];\n deleteTheUploadedFiles: UploadTableItem[];\n isSubmit: boolean;\n}\n\n@Component({\n selector: 'site-file-upload',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: './file-upload.component.html',\n imports: [CoreModule, FilePreviewComponent, FormatFileSizePipe],\n providers: [FormatFileSizePipe],\n})\nexport class FileUploadComponent implements OnDestroy {\n constructor(\n private formatFileSizePipe: FormatFileSizePipe,\n private objectUrlService: ObjectUrlService,\n private fileAdminService: FileAdminService,\n ) {}\n\n /**\n * No default: an unconfigured container is not silently treated as any particular one - the\n * upload input just doesn't render until a container is set (see the template).\n */\n @Input()\n set fileContainerName(v: string) {\n this._fileContainerName = v ?? '';\n\n if (!v) return;\n // Reflects the container's actual server-side limit once known, replacing the pre-fetch\n // default of 1MB below.\n this.fileAdminService.getContainerConfiguration(v).subscribe(res => {\n if (res?.maxBlobSize > 0) {\n this.sizeLimit.set(res.maxBlobSize);\n }\n });\n }\n get fileContainerName(): string {\n return this._fileContainerName;\n }\n private _fileContainerName = '';\n\n @Input() multiple = true;\n\n /** Already-uploaded files to show pre-populated in the table, e.g. when editing an existing record. */\n @Input()\n set fileData(files: UploadTableItem[]) {\n if (files?.length > 0) {\n void this.addFiles(files);\n }\n }\n\n @Output() fileDataChange = new EventEmitter<FileUploadChangeEvent>();\n\n /**\n * A signal, not a plain field: the container's real limit arrives in an HTTP callback, and a plain-field\n * write there never marks a host's OnPush ancestors for check, so the \"exceeds the maximum size\" hint\n * would keep showing the pre-fetch 1MB default until an unrelated event.\n */\n readonly sizeLimit = signal(1048576);\n @Input()\n set limit(v: number) {\n this.sizeLimit.set(v);\n }\n\n filesTableData: UploadTableItem[] = [];\n private readonly previewObjectUrls = new Set<string>();\n private readonly deletedUploadedFiles: UploadTableItem[] = [];\n\n @ViewChild('fileUploadInput', { static: true }) fileUploadInput: ElementRef<HTMLInputElement>;\n\n async onFileInputChange(event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n await this.addFiles(Array.from(input.files ?? []));\n this.emitChange();\n }\n\n deleteFileTableItem(index: number, item: UploadTableItem): void {\n this.filesTableData.splice(index, 1);\n this.releasePreviewUrl(item.src);\n if (item.id) {\n this.deletedUploadedFiles.push(item);\n }\n this.emitChange();\n }\n\n private async addFiles(files: UploadTableItem[]): Promise<void> {\n for (const file of files) {\n file.fileSize = this.formatFileSizePipe.transform(file.size);\n // Use a browser-managed object URL instead of retaining a base64 copy in memory.\n if (!file.src && file instanceof Blob) {\n const objectUrl = this.objectUrlService.get(file);\n (file as UploadTableItem).src = objectUrl;\n this.previewObjectUrls.add(objectUrl);\n }\n }\n\n this.filesTableData.push(...files);\n }\n\n private emitChange(): void {\n const theFilesToBeUploaded = this.filesTableData.filter(item => !item.id);\n const isSubmit = !this.filesTableData.some(item => item.size > this.sizeLimit());\n this.fileDataChange.emit({\n theFilesToBeUploaded,\n deleteTheUploadedFiles: this.deletedUploadedFiles,\n isSubmit,\n });\n }\n\n ngOnDestroy(): void {\n for (const objectUrl of this.previewObjectUrls) {\n URL.revokeObjectURL(objectUrl);\n }\n this.previewObjectUrls.clear();\n }\n\n private releasePreviewUrl(url?: string): void {\n if (!url || !this.previewObjectUrls.delete(url)) {\n return;\n }\n\n URL.revokeObjectURL(url);\n }\n}\n","@if (fileContainerName) {\n <div class=\"input-group mb-3\">\n <input type=\"file\" class=\"form-control\" #fileUploadInput [multiple]=\"multiple\" (change)=\"onFileInputChange($event)\">\n </div>\n\n @if (filesTableData.length>0) {\n <table class=\"table\">\n <thead>\n <tr>\n <th scope=\"col\">{{'Site::Files:FileName' | abpLocalization}}</th>\n <th scope=\"col\" style=\"width: 120px;\">{{'Site::Files:FileSize' | abpLocalization}}</th>\n <th scope=\"col\" style=\"width: 50px;\"></th>\n </tr>\n </thead>\n <tbody>\n @for (item of filesTableData; track item; let i = $index) {\n <tr>\n <td>\n <div class=\"d-flex\">\n <div class=\"flex-grow-1\">\n {{item.name}}\n @if (item.size > sizeLimit()) {\n <div class=\"form-text text-danger\">\n {{'Site::Files:ExceedsMaximumSize' |\n abpLocalization:(sizeLimit()|formatFileSize)}}</div>\n }\n </div>\n <div class=\"\" [attr.title]=\"item.name\">\n <site-file-preview [width]=\"'60px'\" [src]=\"item.src\" [name]=\"item.name\" [type]=\"item.type\"></site-file-preview>\n </div>\n </div>\n </td>\n <td>{{item.fileSize}}</td>\n <td>\n <button class=\"btn btn-sm p-0 btn-outline-secondary \" (click.stop)=\"deleteFileTableItem(i,item)\">\n <i class=\"fas fa-trash p-2\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n} @else {\n <div class=\"alert alert-warning py-2 px-3 mb-0\">\n {{ 'Site::Files:ContainerNotConfigured' | abpLocalization }}\n </div>\n}\n","import { inject } from '@angular/core';\nimport type { CKEditorConfigContributor } from '@dignite/ng.flex-fields-ckeditor';\n// Type-only: a value import from 'ckeditor5' would pull the whole package out of the lazy chunk\n// @dignite/ng.flex-fields-ckeditor loads it in.\nimport type { DowncastAttributeEvent, Editor, Emitter, ModelElement, UpcastElementEvent } from 'ckeditor5';\nimport { SiteFileUrlService } from './site-file-url.service';\n\nconst IMAGE_TYPES = ['imageBlock', 'imageInline'] as const;\n\n/**\n * Lets a CKEditor field work with Site's images on the `SiteAdmin` API's host while storing them relative.\n * A stored address is relative (`<img src=\"/api/site-public/files/...\">`, see `SITE_FILE_PATH`), and this\n * admin UI is served from another origin, where it does not resolve.\n *\n * So the editor's **model** holds the absolute address (naming the signed-in tenant, as the previews do), and only the data the editor hands out is\n * relative: a plugin converts an image's `src` (`imageBlock`/`imageInline`) on the way in (upcast:\n * `setData()`, the initial value, a paste) from relative to absolute, and on the way out (data downcast:\n * `getData()` - the form value that is saved, the Source view, a copy) from absolute back to relative.\n * Everything CKEditor itself does with the model's `src` then just works: the editing view shows it, and\n * `ImageUtils.setImageNaturalSizeAttributes` reads an uploaded image's size from it (`width`/`height`).\n * HTML and Markdown fields alike: both load images into the same model. Links (`<a href>`) are left alone.\n * The upload provider hands the editor the absolute address for the same reason.\n *\n * Registered by `provideSite()` under `CKEDITOR_CONFIG_CONTRIBUTORS` (with `useFactory`, so it can inject);\n * the pattern is the one in `@dignite/ng.flex-fields-ckeditor`'s README, \"Customizing the editor\n * configuration\".\n */\nexport function siteCKEditorConfigContributor(): CKEditorConfigContributor {\n const fileUrls = inject(SiteFileUrlService);\n\n return config => {\n if (!fileUrls.apiBase && !fileUrls.tenantId) {\n // The UI shares its API's origin and the host's: a relative address already loads.\n return;\n }\n\n const toModel = (src: string) => fileUrls.toDisplay(src);\n const toData = (src: string) => fileUrls.toStored(src);\n\n // A CKEditor 5 plugin can be a plain function of the editor.\n function SiteFileAddresses(editor: Editor): void {\n // In: the image plugin creates the model image, src included, in its own `element:img` converter\n // (`upcastImg`, normal priority; a <figure> converts its <img> through the same event). This listener\n // runs after it ('low') and corrects the src of the image it produced.\n editor.conversion.for('upcast').add(upcastDispatcher => {\n (upcastDispatcher as unknown as Emitter).on<UpcastElementEvent>(\n 'element:img',\n (evt, data, conversionApi) => {\n if (!data.modelRange) {\n return;\n }\n\n for (const item of data.modelRange.getItems({ shallow: true })) {\n if (!IMAGE_TYPES.some(type => item.is('element', type))) {\n continue;\n }\n\n const src = item.getAttribute('src');\n if (typeof src === 'string' && src !== toModel(src)) {\n conversionApi.writer.setAttribute('src', toModel(src), item as ModelElement);\n }\n }\n },\n { priority: 'low' },\n );\n });\n\n // Out: the image plugin's own src converter (`downcastImageAttribute`, registered for both downcast\n // pipelines) writes the model's src as it is. In the data pipeline only, this one runs first ('high')\n // and consumes the change, so that one skips it; the editing view keeps the absolute address.\n editor.conversion.for('dataDowncast').add(downcastDispatcher => {\n for (const imageType of IMAGE_TYPES) {\n (downcastDispatcher as unknown as Emitter).on<DowncastAttributeEvent<ModelElement>>(\n `attribute:src:${imageType}`,\n (evt, data, conversionApi) => {\n if (!conversionApi.consumable.consume(data.item, evt.name)) {\n return;\n }\n\n const view = conversionApi.mapper.toViewElement(data.item);\n const img = view && editor.plugins.get('ImageUtils').findViewImgElement(view);\n if (img) {\n const src = (data.attributeNewValue as string | null) ?? '';\n conversionApi.writer.setAttribute('src', toData(src), img);\n }\n },\n { priority: 'high' },\n );\n }\n });\n }\n // The casts to Emitter above: both dispatchers are Emitters (EmitterMixin), but this workspace compiles\n // without strictNullChecks, under which ckeditor5's EmitterMixinConstructor<undefined> resolves to the\n // wrong branch and their types lose `on`.\n\n config.extraPlugins = [...(config.extraPlugins ?? []), SiteFileAddresses];\n };\n}\n","import { inject } from '@angular/core';\nimport type { CKEditorDisplayContributor } from '@dignite/ng.flex-fields-ckeditor';\nimport { SITE_FILE_PATH } from './site-file-url';\nimport { SiteFileUrlService } from './site-file-url.service';\n\n/**\n * Lets the read-only rich-text view (`ff-ckeditor-view`: a content list cell, say) show Site's images on the\n * `SiteAdmin` API's host. The stored HTML holds relative addresses (`<img src=\"/api/site-public/files/...\">`,\n * see `SITE_FILE_PATH`), which do not resolve when this admin UI is served from another origin. The editor\n * itself is handled by `siteCKEditorConfigContributor`; this is its counterpart for the view, which has no\n * editor to convert in.\n *\n * Only `src` is rewritten, in the double- and single-quoted spellings; links (`<a href>`) are left alone, as\n * in the editor. The result is for display only: the view never hands HTML back, so nothing saved carries the\n * host. When the UI shares its API's origin (`apiBase` empty) and the host's, the HTML comes back untouched;\n * otherwise the address also names the signed-in tenant.\n *\n * Registered by `provideSite()` under `CKEDITOR_DISPLAY_CONTRIBUTORS` (with `useFactory`, so it can inject);\n * the pattern is the one in `@dignite/ng.flex-fields-ckeditor`'s README, \"Customizing the read-only view\".\n */\nexport function siteCKEditorDisplayContributor(): CKEditorDisplayContributor {\n const fileUrls = inject(SiteFileUrlService);\n const relativeSrc = new RegExp(String.raw`(\\ssrc\\s*=\\s*)([\"'])(${escapeRegExp(SITE_FILE_PATH)}[^\"']*)\\2`, 'gi');\n\n return html => {\n if (!fileUrls.apiBase && !fileUrls.tenantId) {\n return html;\n }\n\n return html.replace(\n relativeSrc,\n (_match, prefix: string, quote: string, address: string) => prefix + quote + fileUrls.toDisplay(address) + quote,\n );\n };\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { Injectable, inject } from '@angular/core';\nimport type { CKEditorUploadProvider } from '@dignite/ng.flex-fields-ckeditor';\nimport { map, Observable } from 'rxjs';\nimport type { CreateFileInput } from '../../proxy/dignite/site/admin/files';\nimport { FileAdminService } from '../../proxy/dignite/site/admin/files';\nimport { SiteFileUrlService } from './site-file-url.service';\n\n/**\n * Uploads an image inserted into a CKEditor field into Site's file library and hands the editor the\n * file's public address to embed - the same `/api/site-public/files/...` address a file field stores, so\n * the image is served to visitors like any other site file. Registered as the `CKEDITOR_UPLOAD_PROVIDER`\n * by `provideSite()`; the field's `CKEditor.ImagesContainerName` names the container (normally\n * `images`).\n *\n * The editor gets the address on the `SiteAdmin` API's host: its model holds absolute addresses, so it can\n * show the image and read its size (`width`/`height`); `siteCKEditorConfigContributor` turns it back into\n * the relative address the server handed out when the editor's data is read and saved.\n */\n@Injectable({ providedIn: 'root' })\nexport class SiteCKEditorUploadProvider implements CKEditorUploadProvider {\n private readonly fileAdminService = inject(FileAdminService);\n private readonly fileUrls = inject(SiteFileUrlService);\n\n upload(file: File, containerName: string): Observable<string> {\n const body = new FormData();\n body.append('file', file, file.name);\n\n return this.fileAdminService\n .create({\n containerName,\n directoryId: null,\n // The generated proxy sends `file` as the request body; FormData makes it multipart.\n file: body as unknown as CreateFileInput['file'],\n })\n .pipe(\n map(result => {\n if (!result?.url) {\n throw new Error('The upload succeeded but the server returned no file address.');\n }\n return this.fileUrls.toDisplay(result.url);\n }),\n );\n }\n}\n","// Site's file library UI: the picker a file field and the SEO share image use, the browsing modal behind\n// it, and the pieces they are built from. There is no stand-alone file-management screen - files are\n// managed where they are used.\nexport * from './components/file-directory-tree/file-directory-tree.component';\nexport * from './components/file-modal/file-modal.component';\nexport * from './components/file-picker/file-picker.component';\nexport * from './components/file-upload/file-upload.component';\nexport * from './pipes/format-file-size.pipe';\nexport * from './previews/file-preview.component';\nexport * from './previews/models';\nexport * from './services/object-url.service';\nexport * from './services/site-ckeditor-config-contributor';\nexport * from './services/site-ckeditor-display-contributor';\nexport * from './services/site-ckeditor-upload-provider';\nexport * from './services/site-file-containers';\nexport * from './services/site-file-url';\nexport * from './services/site-file-url.service';\nexport * from './services/validators.service';\n","import { mapEnumToOptions } from '@abp/ng.core';\n\nexport enum FlexFieldQueryOperator {\n Equals = 0,\n NotEquals = 1,\n Contains = 2,\n GreaterThan = 3,\n GreaterThanOrEqual = 4,\n LessThan = 5,\n LessThanOrEqual = 6,\n In = 7,\n}\n\nexport const flexFieldQueryOperatorOptions = mapEnumToOptions(FlexFieldQueryOperator);\n","import { mapEnumToOptions } from '@abp/ng.core';\n\nexport enum FlexFieldValueType {\n String = 0,\n Number = 1,\n DateTime = 2,\n Boolean = 3,\n Guid = 4,\n}\n\nexport const flexFieldValueTypeOptions = mapEnumToOptions(FlexFieldValueType);\n","import type { CreateFieldDto, GetFieldListInput, RenameFieldDto, UpdateFieldDto } from './models';\nimport { RestService, Rest } from '@abp/ng.core';\nimport type { ListResultDto } from '@abp/ng.core';\nimport { Injectable, inject } from '@angular/core';\nimport type { FieldDto, FieldTypeDto } from '../../fields/models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FieldAdminService {\n private restService = inject(RestService);\n apiName = 'SiteAdmin';\n \n\n create = (input: CreateFieldDto, config?: Partial<Rest.Config>) =>\n this.restService.request<any, FieldDto>({\n method: 'POST',\n url: '/api/site-admin/fields',\n body: input,\n },\n { apiName: this.apiName,...config });\n \n\n delete = (id: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, void>({\n method: 'DELETE',\n url: `/api/site-admin/fields/${id}`,\n },\n { apiName: this.apiName,...config });\n \n\n findByName = (name: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, FieldDto>({\n method: 'GET',\n url: '/api/site-admin/fields/by-name',\n params: { name },\n },\n { apiName: this.apiName,...config });\n \n\n get = (id: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, FieldDto>({\n method: 'GET',\n url: `/api/site-admin/fields/${id}`,\n },\n { apiName: this.apiName,...config });\n \n\n getFieldTypes = (config?: Partial<Rest.Config>) =>\n this.restService.request<any, ListResultDto<FieldTypeDto>>({\n method: 'GET',\n url: '/api/site-admin/fields/field-types',\n },\n { apiName: this.apiName,...config });\n \n\n getList = (input: GetFieldListInput, config?: Partial<Rest.Config>) =>\n this.restService.request<any, ListResultDto<FieldDto>>({\n method: 'GET',\n url: '/api/site-admin/fields',\n params: { filter: input.filter },\n },\n { apiName: this.apiName,...config });\n \n\n rename = (id: string, input: RenameFieldDto, config?: Partial<Rest.Config>) =>\n this.restService.request<any, FieldDto>({\n method: 'POST',\n url: `/api/site-admin/fields/${id}/rename`,\n body: input,\n },\n { apiName: this.apiName,...config });\n \n\n update = (id: string, input: UpdateFieldDto, config?: Partial<Rest.Config>) =>\n this.restService.request<any, FieldDto>({\n method: 'PUT',\n url: `/api/site-admin/fields/${id}`,\n body: input,\n },\n { apiName: this.apiName,...config });\n}","import type { SiteLanguagesDto, UpdateSiteLanguagesDto } from './models';\nimport { RestService, Rest } from '@abp/ng.core';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SiteLanguageAdminService {\n private restService = inject(RestService);\n apiName = 'SiteAdmin';\n\n\n get = (config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteLanguagesDto>({\n method: 'GET',\n url: '/api/site-admin/languages',\n },\n { apiName: this.apiName,...config });\n\n\n update = (input: UpdateSiteLanguagesDto, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteLanguagesDto>({\n method: 'PUT',\n url: '/api/site-admin/languages',\n body: input,\n },\n { apiName: this.apiName,...config });\n}\n","import type { CreatePageDto, GetPageListInput, UpdatePageDto } from './models';\nimport { RestService, Rest } from '@abp/ng.core';\nimport type { ListResultDto } from '@abp/ng.core';\nimport { Injectable, inject } from '@angular/core';\nimport type { PageDto } from '../../pages/models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PageAdminService {\n private restService = inject(RestService);\n apiName = 'SiteAdmin';\n \n\n create = (input: CreatePageDto, config?: Partial<Rest.Config>) =>\n this.restService.request<any, PageDto>({\n method: 'POST',\n url: '/api/site-admin/pages',\n body: input,\n },\n { apiName: this.apiName,...config });\n \n\n delete = (id: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, void>({\n method: 'DELETE',\n url: `/api/site-admin/pages/${id}`,\n },\n { apiName: this.apiName,...config });\n \n\n findByName = (name: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, PageDto>({\n method: 'GET',\n url: '/api/site-admin/pages/by-name',\n params: { name },\n },\n { apiName: this.apiName,...config });\n \n\n get = (id: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, PageDto>({\n method: 'GET',\n url: `/api/site-admin/pages/${id}`,\n },\n { apiName: this.apiName,...config });\n \n\n getList = (input: GetPageListInput, config?: Partial<Rest.Config>) =>\n this.restService.request<any, ListResultDto<PageDto>>({\n method: 'GET',\n url: '/api/site-admin/pages',\n params: { isActive: input.isActive, filter: input.filter },\n },\n { apiName: this.apiName,...config });\n \n\n update = (id: string, input: UpdatePageDto, config?: Partial<Rest.Config>) =>\n this.restService.request<any, PageDto>({\n method: 'PUT',\n url: `/api/site-admin/pages/${id}`,\n body: input,\n },\n { apiName: this.apiName,...config });\n}","import type { SiteSchemaDto } from './models';\nimport { RestService, Rest } from '@abp/ng.core';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SiteSchemaAdminService {\n private restService = inject(RestService);\n apiName = 'SiteAdmin';\n \n\n get = (config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteSchemaDto>({\n method: 'GET',\n url: '/api/site-admin/schema',\n },\n { apiName: this.apiName,...config });\n}","import type { SiteSeoSettingsDto, UpdateSiteSeoSettingsDto } from './models';\nimport { RestService, Rest } from '@abp/ng.core';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SiteSeoSettingsAdminService {\n private restService = inject(RestService);\n apiName = 'SiteAdmin';\n \n\n \n get = (config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteSeoSettingsDto>({\n method: 'GET',\n headers: { Accept: 'application/json' },\n url: '/api/site-admin/seo-settings',\n },\n { apiName: this.apiName,...config });\n \n\n \n update = (input: UpdateSiteSeoSettingsDto, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteSeoSettingsDto>({\n method: 'PUT',\n headers: { Accept: 'application/json' },\n url: '/api/site-admin/seo-settings',\n body: input,\n },\n { apiName: this.apiName,...config });\n}\n","import type { PublishSiteThemeDto, RenameSiteThemeFileDto, SaveSiteThemeFileDto, SiteReleaseDetailDto, SiteReleaseDto, SiteReleaseFileContentDto, SiteThemeCheckDto, SiteThemeDto, SiteThemeFileDto, SiteThemeFileSummaryDto, SiteThemeFileUsagesDto, SiteThemeRenameResultDto, UpdateSiteThemeDto } from './models';\nimport { RestService, Rest } from '@abp/ng.core';\nimport type { ListResultDto } from '@abp/ng.core';\nimport { Injectable, inject } from '@angular/core';\nimport type { SiteThemePreviewDto, SiteThemePreviewLinkDto } from '../../themes/models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SiteThemeAdminService {\n private restService = inject(RestService);\n apiName = 'SiteAdmin';\n\n\n check = (config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteThemeCheckDto>({\n method: 'GET',\n url: '/api/site-admin/theme/check',\n },\n { apiName: this.apiName,...config });\n\n\n deleteFile = (path: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, void>({\n method: 'DELETE',\n url: '/api/site-admin/theme/files/by-path',\n params: { path },\n },\n { apiName: this.apiName,...config });\n\n\n get = (config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteThemeDto>({\n method: 'GET',\n url: '/api/site-admin/theme',\n },\n { apiName: this.apiName,...config });\n\n\n getFile = (path: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteThemeFileDto>({\n method: 'GET',\n url: '/api/site-admin/theme/files/by-path',\n params: { path },\n },\n { apiName: this.apiName,...config });\n\n\n getFileUsages = (path: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteThemeFileUsagesDto>({\n method: 'GET',\n url: '/api/site-admin/theme/files/usages',\n params: { path },\n },\n { apiName: this.apiName,...config });\n\n\n getFiles = (config?: Partial<Rest.Config>) =>\n this.restService.request<any, ListResultDto<SiteThemeFileSummaryDto>>({\n method: 'GET',\n url: '/api/site-admin/theme/files',\n },\n { apiName: this.apiName,...config });\n\n\n getPreviewLink = (path?: string, releaseId?: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteThemePreviewLinkDto>({\n method: 'GET',\n url: '/api/site-admin/theme/preview-link',\n params: { path, releaseId },\n },\n { apiName: this.apiName,...config });\n\n\n getRelease = (id: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteReleaseDetailDto>({\n method: 'GET',\n url: `/api/site-admin/theme/releases/${id}`,\n },\n { apiName: this.apiName,...config });\n\n\n getReleaseFile = (id: string, path: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteReleaseFileContentDto>({\n method: 'GET',\n url: `/api/site-admin/theme/releases/${id}/files/by-path`,\n params: { path },\n },\n { apiName: this.apiName,...config });\n\n\n getReleases = (config?: Partial<Rest.Config>) =>\n this.restService.request<any, ListResultDto<SiteReleaseDto>>({\n method: 'GET',\n url: '/api/site-admin/theme/releases',\n },\n { apiName: this.apiName,...config });\n\n\n preview = (path: string, releaseId?: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteThemePreviewDto>({\n method: 'GET',\n url: '/api/site-admin/theme/preview',\n params: { path, releaseId },\n },\n { apiName: this.apiName,...config });\n\n\n publish = (input: PublishSiteThemeDto, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteReleaseDto>({\n method: 'POST',\n url: '/api/site-admin/theme/publish',\n body: input,\n },\n { apiName: this.apiName,...config });\n\n\n renameFile = (input: RenameSiteThemeFileDto, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteThemeRenameResultDto>({\n method: 'POST',\n url: '/api/site-admin/theme/files/rename',\n body: input,\n },\n { apiName: this.apiName,...config });\n\n\n restoreRelease = (id: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, void>({\n method: 'POST',\n url: `/api/site-admin/theme/releases/${id}/restore`,\n },\n { apiName: this.apiName,...config });\n\n\n saveFile = (input: SaveSiteThemeFileDto, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteThemeFileDto>({\n method: 'PUT',\n url: '/api/site-admin/theme/files',\n body: input,\n },\n { apiName: this.apiName,...config });\n\n\n setLiveRelease = (id: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteReleaseDto>({\n method: 'POST',\n url: `/api/site-admin/theme/releases/${id}/set-live`,\n },\n { apiName: this.apiName,...config });\n\n\n update = (input: UpdateSiteThemeDto, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteThemeDto>({\n method: 'PUT',\n url: '/api/site-admin/theme',\n body: input,\n },\n { apiName: this.apiName,...config });\n}\n","import { mapEnumToOptions } from '@abp/ng.core';\n\nexport enum SiteThemeUsageKindDto {\n Page = 0,\n Include = 1,\n AssetUrl = 2,\n Layout = 3,\n DefaultLayout = 4,\n}\n\nexport const siteThemeUsageKindDtoOptions = mapEnumToOptions(SiteThemeUsageKindDto);\n","import type { CreateSiteThemeExportLinkInput, CreateSiteThemeImportLinkInput, ImportSiteThemeInput, SiteThemeImportResultDto, SiteThemeTransferLinkDto } from './models';\nimport { RestService, Rest } from '@abp/ng.core';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SiteThemeTransferAdminService {\n private restService = inject(RestService);\n apiName = 'SiteAdmin';\n \n\n \n createExportLink = (input: CreateSiteThemeExportLinkInput, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteThemeTransferLinkDto>({\n method: 'POST',\n headers: { Accept: 'application/json' },\n url: '/api/site-admin/theme/export-links',\n body: input,\n },\n { apiName: this.apiName,...config });\n \n\n \n createImportLink = (input: CreateSiteThemeImportLinkInput, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteThemeTransferLinkDto>({\n method: 'POST',\n headers: { Accept: 'application/json' },\n url: '/api/site-admin/theme/import-links',\n body: input,\n },\n { apiName: this.apiName,...config });\n \n\n \n downloadByTicket = (ticket: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, Blob>({\n method: 'GET',\n responseType: 'blob',\n headers: { Accept: 'application/octet-stream' },\n url: `/api/site-admin/theme/download/${ticket}`,\n },\n { apiName: this.apiName,...config });\n \n\n \n export = (releaseId?: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, Blob>({\n method: 'GET',\n responseType: 'blob',\n headers: { Accept: 'application/octet-stream' },\n url: '/api/site-admin/theme/export',\n params: { releaseId },\n },\n { apiName: this.apiName,...config });\n \n\n \n import = (input: FormData, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteThemeImportResultDto>({\n method: 'POST',\n headers: { Accept: 'application/json' },\n url: '/api/site-admin/theme/import',\n body: input,\n },\n { apiName: this.apiName,...config });\n \n\n \n uploadByTicket = (ticket: string, config?: Partial<Rest.Config>) =>\n this.restService.request<any, SiteThemeImportResultDto>({\n method: 'PUT',\n headers: { Accept: 'application/json' },\n url: `/api/site-admin/theme/upload/${ticket}`,\n },\n { apiName: this.apiName,...config });\n}\n","import { mapEnumToOptions } from '@abp/ng.core';\n\nexport enum ContentStatus {\n Draft = 0,\n Published = 1,\n Archived = 2,\n}\n\nexport const contentStatusOptions = mapEnumToOptions(ContentStatus);\n","import { mapEnumToOptions } from '@abp/ng.core';\n\nexport enum SiteThemeFileStatus {\n Unchanged = 0,\n Modified = 1,\n Added = 2,\n Deleted = 3,\n}\n\nexport const siteThemeFileStatusOptions = mapEnumToOptions(SiteThemeFileStatus);\n","import { mapEnumToOptions } from '@abp/ng.core';\n\nexport enum SiteThemeIssueSeverity {\n Error = 0,\n Warning = 1,\n}\n\nexport const siteThemeIssueSeverityOptions = mapEnumToOptions(SiteThemeIssueSeverity);\n","import type { GetContentListInput } from '../proxy/dignite/site/admin/contents/models';\n\n/**\n * Flattens a content-list query into the shape ASP.NET Core's model binder actually reads.\n *\n * `GET /api/site-admin/contents` binds `GetContentListInput` from the query string, and that input\n * carries `FlexFieldConditions: List<FlexFieldQueryCondition>` - a collection of complex objects.\n * ASP.NET Core binds those only from indexed keys (`flexFieldConditions[0].fieldId=...`), whereas the\n * generated proxy hands the array straight to `RestService`, which builds an `HttpParams` via\n * `{ fromObject }`. Angular stringifies each element, so the server receives\n * `flexFieldConditions=[object Object]` and every condition is silently dropped - no error, just\n * unfiltered results. Hence this translation rather than using the generated `getList`.\n *\n * The flex-fields demo does not need an equivalent because its list endpoint is a POST with a body\n * (`/api/app/product/search`); Site's is a GET, so the conditions have to survive the query string.\n */\nexport function toContentListParams(input: GetContentListInput): Record<string, unknown> {\n const { flexFieldConditions, ...rest } = input;\n const params: Record<string, unknown> = { ...rest };\n\n (flexFieldConditions ?? []).forEach((condition, index) => {\n const prefix = `flexFieldConditions[${index}]`;\n params[`${prefix}.fieldId`] = condition.fieldId;\n params[`${prefix}.fieldName`] = condition.fieldName;\n params[`${prefix}.operator`] = condition.operator;\n params[`${prefix}.value`] = condition.value;\n params[`${prefix}.valueType`] = condition.valueType;\n });\n\n return params;\n}\n","import { Injectable } from '@angular/core';\nimport type { GetContentListInput } from '../proxy/dignite/site/admin/contents/models';\nimport type { FlexFieldQueryCondition } from '../proxy/dignite/abp/flex-fields/models';\n\nexport interface ContentListState {\n filters: GetContentListInput;\n appliedConditions: FlexFieldQueryCondition[];\n /** Raw `flexFieldSearch` form value, keyed by field name - what each search widget should redisplay. */\n searchValues: Record<string, unknown>;\n page: number;\n sortKey: string | number;\n sortOrder: string;\n maxResultCount: number;\n}\n\n/**\n * Remembers the content list's filters, search conditions and paging across a round trip to the\n * create/edit page and back.\n *\n * `ContentsComponent` is destroyed on every route change - editing a content is a full page\n * (`content-editor.component.ts`), not a dialog - so without this, `filters`, the applied flex-field\n * search and the `ListService` it owns would all reset to their defaults every time an admin finishes\n * editing and returns to the list.\n *\n * In-memory rather than the URL: `flexFieldConditions` covers arbitrary per-content-type fields, and\n * round-tripping that shape through query params would need close to as much code as the search feature\n * itself. Losing the snapshot on a hard refresh is an acceptable trade for an admin filter, unlike a\n * shareable resource link.\n */\n@Injectable({ providedIn: 'root' })\nexport class ContentListStateService {\n private snapshot?: ContentListState;\n\n save(state: ContentListState): void {\n this.snapshot = state;\n }\n\n restore(): ContentListState | undefined {\n return this.snapshot;\n }\n}\n","import { Rest, RestService } from '@abp/ng.core';\nimport type { PagedResultDto } from '@abp/ng.core';\nimport { Injectable, inject } from '@angular/core';\nimport type { GetContentListInput } from '../proxy/dignite/site/admin/contents/models';\nimport type { ContentDto } from '../proxy/dignite/site/contents/models';\nimport { toContentListParams } from './content-list-params';\n\n/**\n * Stands in for `ContentAdminService.getList` alone. Everything else on the generated proxy is used\n * directly - only the list call needs `flexFieldConditions` flattened before it reaches `RestService`\n * (see {@link toContentListParams}). Kept here rather than patched into `proxy/` so that re-running\n * `abp generate-proxy` cannot quietly revert the fix.\n */\n@Injectable({ providedIn: 'root' })\nexport class ContentQueryService {\n private readonly restService = inject(RestService);\n\n readonly apiName = 'SiteAdmin';\n\n getList = (input: GetContentListInput, config?: Partial<Rest.Config>) =>\n this.restService.request<unknown, PagedResultDto<ContentDto>>(\n {\n method: 'GET',\n url: '/api/site-admin/contents',\n params: toContentListParams(input),\n },\n { apiName: this.apiName, ...config },\n );\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable, map, shareReplay } from 'rxjs';\nimport { ContentTypeAdminService } from '../proxy/dignite/site/admin/content-types/content-type-admin.service';\nimport { FieldAdminService } from '../proxy/dignite/site/admin/fields/field-admin.service';\nimport { SiteSchemaAdminService } from '../proxy/dignite/site/admin/schema/site-schema-admin.service';\nimport type { SiteSchemaDto } from '../proxy/dignite/site/admin/schema/models';\nimport type { ContentTypeDto } from '../proxy/dignite/site/content-types/models';\nimport type { FieldDto } from '../proxy/dignite/site/fields/models';\n\n/**\n * The reference data every screen needs but none of them owns: the site's enabled languages, the whole\n * field library, and which field types can be indexed. Each is fetched once and replayed; call the\n * matching `invalidate*` after a write that would change it.\n *\n * **On the schema endpoint.** `GET /api/site-admin/schema` is keyed by *name* all the way down -\n * `SiteSchemaContentTypeDto` and `SiteSchemaFieldDto` carry no id. That shape exists for MCP, which\n * addresses everything by name. The admin UI cannot resolve a content type's fields through it, because\n * a `ContentDto` identifies its type only by `contentTypeId` (a Guid) and there is nothing to join a\n * Guid to a name on. So the schema is used here for site-level settings only; field resolution goes\n * through {@link getFieldsById}, joined against `ContentTypeDto.fields[].fieldId`.\n */\n@Injectable({ providedIn: 'root' })\nexport class SiteReferenceDataService {\n private readonly schemaService = inject(SiteSchemaAdminService);\n private readonly fieldService = inject(FieldAdminService);\n private readonly contentTypeService = inject(ContentTypeAdminService);\n\n private schemaCache?: Observable<SiteSchemaDto>;\n private fieldsCache?: Observable<Map<string, FieldDto>>;\n private indexableCache?: Observable<Map<string, boolean>>;\n private contentTypesCache?: Observable<Map<string, ContentTypeDto>>;\n\n /** Site-level settings. `enabledLanguages[0]` is the default language. */\n getSchema(): Observable<SiteSchemaDto> {\n this.schemaCache ??= this.schemaService\n .get()\n .pipe(shareReplay({ bufferSize: 1, refCount: false }));\n return this.schemaCache;\n }\n\n /** The whole field library keyed by id - `ContentTypeFieldDto` carries only `fieldId`. */\n getFieldsById(): Observable<Map<string, FieldDto>> {\n this.fieldsCache ??= this.fieldService\n .getList({})\n .pipe(\n map(result => new Map((result.items ?? []).map(field => [field.id!, field]))),\n shareReplay({ bufferSize: 1, refCount: false }),\n );\n return this.fieldsCache;\n }\n\n /**\n * Whether a field type has a query-index slot at all, keyed by field type name. Straight from the\n * server: the answer is `IFieldType.IndexValueType`, and the Angular flex-fields library deliberately\n * does not restate it. A type that answers `false` can never be searched however its `searchable` flag\n * is set - `FlexFieldIndexManagerBase.GetIndexableFieldsAsync` skips it regardless.\n */\n getIndexableByFieldType(): Observable<Map<string, boolean>> {\n this.indexableCache ??= this.fieldService\n .getFieldTypes()\n .pipe(\n map(result => new Map((result.items ?? []).map(type => [type.name ?? '', type.indexable ?? true]))),\n shareReplay({ bufferSize: 1, refCount: false }),\n );\n return this.indexableCache;\n }\n\n /**\n * Every content type, across every page, keyed by id - `ContentDto` carries only `contentTypeId`, and\n * `ContentTypeAdminService.getListByPage` alone cannot resolve a name for a row whose page is not the\n * one currently selected in a filter.\n */\n getContentTypesById(): Observable<Map<string, ContentTypeDto>> {\n this.contentTypesCache ??= this.contentTypeService\n .getList()\n .pipe(\n map(result => new Map((result.items ?? []).map(type => [type.id!, type]))),\n shareReplay({ bufferSize: 1, refCount: false }),\n );\n return this.contentTypesCache;\n }\n\n invalidateFields(): void {\n this.fieldsCache = undefined;\n }\n\n invalidateSchema(): void {\n this.schemaCache = undefined;\n }\n\n invalidateContentTypes(): void {\n this.contentTypesCache = undefined;\n }\n}\n","import { authGuard, permissionGuard, RouterOutletComponent } from '@abp/ng.core';\nimport { Routes } from '@angular/router';\nimport { eSitePolicyNames } from './enums/policy-names';\n\n/**\n * No `admin` path segment (unlike Dignite.Cms's `/cms/admin/...`): the public tier has no Angular UI,\n * so every route here is an admin route and the extra segment would carry no information.\n *\n * The parent deliberately has no `pathMatch: 'full'`. It did while this library was a stub, which\n * would have stopped any child route from ever matching.\n */\nexport const SITE_ROUTES: Routes = [\n {\n path: '',\n component: RouterOutletComponent,\n canActivate: [authGuard, permissionGuard],\n children: [\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'contents',\n },\n {\n path: 'contents',\n loadComponent: () =>\n import('./components/contents/contents.component').then(c => c.ContentsComponent),\n data: { requiredPolicy: eSitePolicyNames.Contents },\n },\n {\n // Editing a content is a page, not a dialog: the left half is a form as long as the content\n // type defines, which a dialog could only scroll.\n path: 'contents/create',\n loadComponent: () =>\n import('./components/contents/content-editor.component').then(c => c.ContentEditorComponent),\n data: { requiredPolicy: eSitePolicyNames.ContentsCreate },\n },\n {\n path: 'contents/:id/edit',\n loadComponent: () =>\n import('./components/contents/content-editor.component').then(c => c.ContentEditorComponent),\n data: { requiredPolicy: eSitePolicyNames.ContentsUpdate },\n },\n {\n path: 'pages',\n loadComponent: () => import('./components/pages/pages.component').then(c => c.PagesComponent),\n data: { requiredPolicy: eSitePolicyNames.Pages },\n },\n {\n path: 'pages/:pageId/content-types',\n loadComponent: () =>\n import('./components/content-types/content-types.component').then(\n c => c.ContentTypesComponent,\n ),\n data: { requiredPolicy: eSitePolicyNames.ContentTypes },\n },\n {\n path: 'fields',\n loadComponent: () =>\n import('./components/fields/fields.component').then(c => c.FieldsComponent),\n data: { requiredPolicy: eSitePolicyNames.Fields },\n },\n {\n // The theme is edited on a page of its own: a file tree, a code editor and the check side by side.\n path: 'theme',\n loadComponent: () =>\n import('./components/theme/theme-workbench.component').then(c => c.ThemeWorkbenchComponent),\n data: { requiredPolicy: eSitePolicyNames.Themes },\n },\n ],\n },\n];\n","/*\n * Public API Surface of @dignite/ng.site\n *\n * Screen components are intentionally absent: every one of them is reached through `SITE_ROUTES`'\n * `loadComponent`, and exporting them here would pull all of them into whatever chunk imports this\n * barrel, undoing the lazy loading.\n */\n\nexport * from './lib/enums';\nexport * from './lib/field-types';\nexport * from './lib/files';\nexport * from './lib/proxy';\nexport * from './lib/services';\nexport * from './lib/site.routes';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1","i1.DirectoryAdminService","i5","i6","i1.FileAdminService","i4","i1.FormatFileSizePipe","i2.ObjectUrlService","i3.FileAdminService"],"mappings":"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"}
|