@tsi-developpement/tsi-shared-ui 1.9.2 → 1.9.4
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/esm2022/lib/enums/grid-sizing-mode.mjs +15 -0
- package/esm2022/lib/enums/index.mjs +2 -2
- package/esm2022/lib/interfaces/grid/grid-configuration.mjs +1 -1
- package/esm2022/lib/interfaces/index.mjs +1 -2
- package/esm2022/lib/tsi-components/create-or-edit-entity-informations/create-or-edit-entity-informations.component.mjs +1 -1
- package/esm2022/lib/tsi-components/create-or-edit-modele-import/create-or-edit-modele-import.component.mjs +4 -5
- package/esm2022/lib/tsi-components/input-components/editable-grid/editable-grid.component.mjs +61 -3
- package/esm2022/lib/tsi-components/input-components/tsi-rate-input/tsi-rate-input.component.mjs +41 -12
- package/esm2022/lib/tsi-components/manage-import-export/manage-import-export.component.mjs +1 -1
- package/esm2022/lib/tsi-components/manage-reporting/manage-reporting.component.mjs +3 -5
- package/esm2022/lib/tsi-components/modal-component/modal.component.mjs +1 -1
- package/esm2022/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.mjs +71 -78
- package/esm2022/lib/tsi-components/output-components/tsi-rate-display/tsi-rate-display.component.mjs +15 -5
- package/esm2022/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.mjs +7 -4
- package/esm2022/lib/tsi-components/tsi-action-erp-create-or-edit/tsi-action-erp-create-or-edit.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-action-erp-list/tsi-action-erp-list.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-dynamic-form/dynamic-form-list/dynamic-form-list.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.mjs +7 -3
- package/esm2022/lib/tsi-components/tsi-notes-grid/tsi-notes-grid.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-popup-text-viewer/tsi-popup-text-viewer.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-upload-grid/tsi-upload-grid.component.mjs +1 -1
- package/esm2022/lib/tsi-helpers/column-width.controller.mjs +97 -0
- package/esm2022/lib/tsi-helpers/grid-col-style.helper.mjs +28 -5
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +4039 -3839
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/consts/app-providers.d.ts +1 -1
- package/lib/enums/grid-sizing-mode.d.ts +13 -0
- package/lib/enums/index.d.ts +1 -1
- package/lib/interfaces/grid/grid-configuration.d.ts +7 -2
- package/lib/interfaces/index.d.ts +0 -1
- package/lib/tsi-components/input-components/editable-grid/editable-grid.component.d.ts +45 -1
- package/lib/tsi-components/input-components/tsi-rate-input/tsi-rate-input.component.d.ts +24 -3
- package/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.d.ts +48 -2
- package/lib/tsi-components/output-components/tsi-rate-display/tsi-rate-display.component.d.ts +7 -1
- package/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.d.ts +3 -2
- package/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.d.ts +3 -1
- package/lib/tsi-helpers/column-width.controller.d.ts +67 -0
- package/lib/tsi-helpers/grid-col-style.helper.d.ts +16 -5
- package/package.json +1 -1
- package/esm2022/lib/enums/css-units.mjs +0 -10
- package/esm2022/lib/interfaces/styles/css-size-property.mjs +0 -17
- package/lib/enums/css-units.d.ts +0 -8
- package/lib/interfaces/styles/css-size-property.d.ts +0 -10
|
@@ -32,7 +32,7 @@ export class TsiNotesGridComponent extends TsiListBaseComponent {
|
|
|
32
32
|
this.titleComponent = 'shared_notes_note';
|
|
33
33
|
}
|
|
34
34
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiNotesGridComponent, deps: [{ token: i1.NoteService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
35
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiNotesGridComponent, selector: "app-tsi-notes-grid", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<Tsi-Generic-Crud [cudComponent]=\"comp\" [header]=\"titleComponent\" [columns]=\"columns\" [crudService]=\"notesService\"\r\n [modalSize]=\"modalSize\" [showUploadButton]=\"false\" [showNoteButton]=\"false\" presentationDesigner [id]=\"'app-tsi-notes-grid'\"\r\n></Tsi-Generic-Crud>", styles: [""], dependencies: [{ kind: "component", type: i2.TsiGenericCrudComponent, selector: "Tsi-Generic-Crud", inputs: ["entityInfo", "modalData", "columns", "gridConfiguration", "cudComponent", "crudService", "header", "modalSize", "descriminatorValue", "presentationSettings", "preventAddEvent", "formEndpoint", "formName", "isSearchButtonDisabled", "showHeaderFilters", "showEditButton", "showDeleteButton", "showAddButton", "showConsultButton", "showUploadButton", "showNoteButton", "showDownloadButton", "showInfoButton", "showDuplicateButton", "showFormButton", "showCalenderView", "showCardView", "showImportFromOutlookButton", "showKanbanView", "showKanbanViewOfWorkFlowEtat", "showSearchField", "searchFields", "calenderSchema", "showActionButton", "selectKeyOnly", "selectionMode", "selectedItems", "key", "id", "businessClass", "searchOnInit", "showGlobalSearch", "showExportButton", "showReporting"], outputs: ["selectedItemsChange", "searchFieldsValueChanged", "buttonColumnClicked", "onImportFromOutlookClicked"] }, { kind: "directive", type: i3.PresentationDesignerDirective, selector: "[presentationDesigner]" }] }); }
|
|
35
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiNotesGridComponent, selector: "app-tsi-notes-grid", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<Tsi-Generic-Crud [cudComponent]=\"comp\" [header]=\"titleComponent\" [columns]=\"columns\" [crudService]=\"notesService\"\r\n [modalSize]=\"modalSize\" [showUploadButton]=\"false\" [showNoteButton]=\"false\" presentationDesigner [id]=\"'app-tsi-notes-grid'\"\r\n></Tsi-Generic-Crud>", styles: [""], dependencies: [{ kind: "component", type: i2.TsiGenericCrudComponent, selector: "Tsi-Generic-Crud", inputs: ["entityInfo", "modalData", "columns", "gridConfiguration", "cudComponent", "crudService", "header", "modalSize", "descriminatorValue", "presentationSettings", "preventAddEvent", "formEndpoint", "formName", "isSearchButtonDisabled", "showHeaderFilters", "showEditButton", "showDeleteButton", "showAddButton", "showConsultButton", "showUploadButton", "showNoteButton", "showDownloadButton", "showInfoButton", "showDuplicateButton", "showFormButton", "showCalenderView", "showCardView", "showImportFromOutlookButton", "showKanbanView", "showKanbanViewOfWorkFlowEtat", "showSearchField", "searchFields", "calenderSchema", "showActionButton", "sizingMode", "selectKeyOnly", "selectionMode", "selectedItems", "key", "id", "businessClass", "searchOnInit", "showGlobalSearch", "showExportButton", "showReporting"], outputs: ["selectedItemsChange", "searchFieldsValueChanged", "buttonColumnClicked", "onImportFromOutlookClicked"] }, { kind: "directive", type: i3.PresentationDesignerDirective, selector: "[presentationDesigner]" }] }); }
|
|
36
36
|
}
|
|
37
37
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiNotesGridComponent, decorators: [{
|
|
38
38
|
type: Component,
|
package/esm2022/lib/tsi-components/tsi-popup-text-viewer/tsi-popup-text-viewer.component.mjs
CHANGED
|
@@ -176,7 +176,7 @@ export class TsiPopupTextViewerComponent {
|
|
|
176
176
|
this._dialogRef.onClose.subscribe((val) => this.closeConsultModal());
|
|
177
177
|
}
|
|
178
178
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiPopupTextViewerComponent, deps: [{ token: i1.TsiModalService }, { token: i0.ChangeDetectorRef }, { token: i0.EnvironmentInjector }, { token: i2.DynamicDialogConfig }, { token: i3.DialogDataService }, { token: i4.JournalisationApplicationService }, { token: i5.StatusHistoryService }, { token: i2.DynamicDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
179
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiPopupTextViewerComponent, selector: "app-tsi-popup-text-viewer", providers: [...appProviders], ngImport: i0, template: "<div class=\"card\">\r\n\r\n <div class=\"grid mt-1\">\r\n \r\n <!-- Titre -->\r\n <div class=\"col-12 md:col-2 lg:col-2\">\r\n <div style=\"font-weight: bold; color: #007ad9;\">\r\n {{ 'tsi_popup_view_log_history_last_modification' | localize }}\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-12 md:col-4 lg:col-4\" style=\"background-color: #f0f8ff;\">\r\n <i class=\"pi pi-user\" style=\"color: #007ad9; margin-right: 0.5rem;\"></i>\r\n {{ 'tsi_popup_view_log_history_createdby' | localize }}\r\n <strong>{{ creationUser }}</strong>\r\n\r\n <i style=\"color: #007ad9; margin-right: 0.5rem;\"></i>\r\n {{ 'tsi_popup_view_log_history_createdOn' | localize }}\r\n <strong>{{ dateSaisie | date : formatDate }}</strong>\r\n\r\n </div>\r\n <div class=\"col-12 md:col-4 lg:col-4\" style=\"background-color: #f1f2f3;\">\r\n <i class=\"pi pi-pencil\" style=\"color: #007ad9; margin-right: 0.5rem;\"></i>\r\n {{ 'tsi_popup_view_log_history_modifiedBy' | localize }}\r\n <strong>{{ modifUser }}</strong>\r\n\r\n <i style=\"color: #007ad9; margin-right: 0.5rem;\"></i>\r\n {{ 'tsi_popup_view_log_history_modifiedOn' | localize }}\r\n <strong>{{ dateModif | date : formatDate }}</strong>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n\r\n<div class=\"grid mt-5 mb-5 justify-content-end\">\r\n <button \r\n type=\"button\" \r\n pButton label=\"Consulter les informations d'entit\u00E9\" \r\n icon=\"pi pi-eye\"\r\n class=\"mr-5 p-button-sm p-button-outlined\" \r\n (click)=\"openEntitieInformationModal()\"></button>\r\n</div>\r\n\r\n<p-tabView>\r\n <p-tabPanel [header]=\"'history_of_changes_title'| localize\">\r\n <tsi-view-grid \r\n [modalSize]=\"modalSize\" \r\n [formName]=\"'logfobject'\" \r\n [header]=\"titleComponent\" \r\n [getDataFromApi]=\"false\"\r\n [gridData]=\"logEventFiltredData\" \r\n [searchOnInit]=\"false\" \r\n (buttonColumnClicked)=\"buttonColumnClicked($event)\"\r\n [columns]=\"columnsLogEvent\" \r\n [selectKeyOnly]=\"true\" \r\n [showConsultButton]=\"true\"\r\n ></tsi-view-grid>\r\n </p-tabPanel>\r\n <p-tabPanel header=\"{{'administration_administration_statusHistory_historiqueModificationsStatut' | localize}}\">\r\n <tsi-view-grid \r\n [modalSize]=\"modalSize\" \r\n [formName]=\"'logfStatusobject'\" \r\n [targetBusinessClass]=\"targetBusinessClass\"\r\n [header]=\"'administration_administration_statusHistory_historiqueModificationsStatut' | localize\" \r\n [getDataFromApi]=\"false\"\r\n [gridData]=\"statusHistoryFiltredData\" \r\n [searchOnInit]=\"false\" \r\n [columns]=\"columnsStatuHistory\" \r\n [selectKeyOnly]=\"true\" \r\n ></tsi-view-grid>\r\n </p-tabPanel>\r\n</p-tabView>\r\n", styles: [".p-card{padding:.5rem;border:1px solid #ddd;border-radius:.5rem;background-color:#f9f9f9}.p-card span{white-space:nowrap}.p-card i{color:#007ad9}\n"], dependencies: [{ kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i7.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i7.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i8.TsiViewGridComponent, selector: "tsi-view-grid", inputs: ["columns", "gridConfiguration", "viewComponent", "crudService", "header", "modalSize", "showConsultButton", "showSearchField", "searchFields", "formEndpoint", "formName", "id", "showImportExportButton", "targetBusinessClass", "getDataFromApi", "gridData", "isSearchButtonDisabled", "selectKeyOnly", "selectionMode", "selectedItems", "key", "showGlobalSearch", "showExportButton", "showCalenderView", "showHeaderFilters", "showFilterButton", "selectAll", "checkedByField", "sortMode", "searchOnInit"], outputs: ["summariesChange", "selectedItemsChange", "buttonColumnClicked", "searchFieldsValueChanged", "getAllPagedResultChanged"] }, { kind: "pipe", type: i9.DatePipe, name: "date" }, { kind: "pipe", type: i10.LocalizePipe, name: "localize" }] }); }
|
|
179
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiPopupTextViewerComponent, selector: "app-tsi-popup-text-viewer", providers: [...appProviders], ngImport: i0, template: "<div class=\"card\">\r\n\r\n <div class=\"grid mt-1\">\r\n \r\n <!-- Titre -->\r\n <div class=\"col-12 md:col-2 lg:col-2\">\r\n <div style=\"font-weight: bold; color: #007ad9;\">\r\n {{ 'tsi_popup_view_log_history_last_modification' | localize }}\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-12 md:col-4 lg:col-4\" style=\"background-color: #f0f8ff;\">\r\n <i class=\"pi pi-user\" style=\"color: #007ad9; margin-right: 0.5rem;\"></i>\r\n {{ 'tsi_popup_view_log_history_createdby' | localize }}\r\n <strong>{{ creationUser }}</strong>\r\n\r\n <i style=\"color: #007ad9; margin-right: 0.5rem;\"></i>\r\n {{ 'tsi_popup_view_log_history_createdOn' | localize }}\r\n <strong>{{ dateSaisie | date : formatDate }}</strong>\r\n\r\n </div>\r\n <div class=\"col-12 md:col-4 lg:col-4\" style=\"background-color: #f1f2f3;\">\r\n <i class=\"pi pi-pencil\" style=\"color: #007ad9; margin-right: 0.5rem;\"></i>\r\n {{ 'tsi_popup_view_log_history_modifiedBy' | localize }}\r\n <strong>{{ modifUser }}</strong>\r\n\r\n <i style=\"color: #007ad9; margin-right: 0.5rem;\"></i>\r\n {{ 'tsi_popup_view_log_history_modifiedOn' | localize }}\r\n <strong>{{ dateModif | date : formatDate }}</strong>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n\r\n<div class=\"grid mt-5 mb-5 justify-content-end\">\r\n <button \r\n type=\"button\" \r\n pButton label=\"Consulter les informations d'entit\u00E9\" \r\n icon=\"pi pi-eye\"\r\n class=\"mr-5 p-button-sm p-button-outlined\" \r\n (click)=\"openEntitieInformationModal()\"></button>\r\n</div>\r\n\r\n<p-tabView>\r\n <p-tabPanel [header]=\"'history_of_changes_title'| localize\">\r\n <tsi-view-grid \r\n [modalSize]=\"modalSize\" \r\n [formName]=\"'logfobject'\" \r\n [header]=\"titleComponent\" \r\n [getDataFromApi]=\"false\"\r\n [gridData]=\"logEventFiltredData\" \r\n [searchOnInit]=\"false\" \r\n (buttonColumnClicked)=\"buttonColumnClicked($event)\"\r\n [columns]=\"columnsLogEvent\" \r\n [selectKeyOnly]=\"true\" \r\n [showConsultButton]=\"true\"\r\n ></tsi-view-grid>\r\n </p-tabPanel>\r\n <p-tabPanel header=\"{{'administration_administration_statusHistory_historiqueModificationsStatut' | localize}}\">\r\n <tsi-view-grid \r\n [modalSize]=\"modalSize\" \r\n [formName]=\"'logfStatusobject'\" \r\n [targetBusinessClass]=\"targetBusinessClass\"\r\n [header]=\"'administration_administration_statusHistory_historiqueModificationsStatut' | localize\" \r\n [getDataFromApi]=\"false\"\r\n [gridData]=\"statusHistoryFiltredData\" \r\n [searchOnInit]=\"false\" \r\n [columns]=\"columnsStatuHistory\" \r\n [selectKeyOnly]=\"true\" \r\n ></tsi-view-grid>\r\n </p-tabPanel>\r\n</p-tabView>\r\n", styles: [".p-card{padding:.5rem;border:1px solid #ddd;border-radius:.5rem;background-color:#f9f9f9}.p-card span{white-space:nowrap}.p-card i{color:#007ad9}\n"], dependencies: [{ kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i7.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i7.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i8.TsiViewGridComponent, selector: "tsi-view-grid", inputs: ["columns", "gridConfiguration", "viewComponent", "crudService", "header", "modalSize", "showConsultButton", "showSearchField", "searchFields", "formEndpoint", "formName", "id", "showImportExportButton", "targetBusinessClass", "getDataFromApi", "gridData", "isSearchButtonDisabled", "selectKeyOnly", "selectionMode", "selectedItems", "key", "showGlobalSearch", "showExportButton", "showCalenderView", "showHeaderFilters", "showFilterButton", "selectAll", "checkedByField", "sortMode", "sizingMode", "searchOnInit"], outputs: ["summariesChange", "selectedItemsChange", "buttonColumnClicked", "searchFieldsValueChanged", "getAllPagedResultChanged"] }, { kind: "pipe", type: i9.DatePipe, name: "date" }, { kind: "pipe", type: i10.LocalizePipe, name: "localize" }] }); }
|
|
180
180
|
}
|
|
181
181
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiPopupTextViewerComponent, decorators: [{
|
|
182
182
|
type: Component,
|
|
@@ -49,7 +49,7 @@ export class TsiUploadGridComponent extends TsiListBaseComponent {
|
|
|
49
49
|
this.table = "Fichier";
|
|
50
50
|
}
|
|
51
51
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiUploadGridComponent, deps: [{ token: i1.FichierUploadService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
52
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiUploadGridComponent, selector: "app-tsi-upload-grid", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<Tsi-Generic-Crud\r\n [cudComponent]=\"comp\"\r\n [header]=\"titleComponent\"\r\n [columns]=\"columns\"\r\n [crudService]=\"_fichierService\"\r\n [modalSize]=\"modalSize\"\r\n [showUploadButton]=\"false\"\r\n [showDownloadButton]=\"true\"\r\n >\r\n</Tsi-Generic-Crud>\r\n", styles: [""], dependencies: [{ kind: "component", type: i2.TsiGenericCrudComponent, selector: "Tsi-Generic-Crud", inputs: ["entityInfo", "modalData", "columns", "gridConfiguration", "cudComponent", "crudService", "header", "modalSize", "descriminatorValue", "presentationSettings", "preventAddEvent", "formEndpoint", "formName", "isSearchButtonDisabled", "showHeaderFilters", "showEditButton", "showDeleteButton", "showAddButton", "showConsultButton", "showUploadButton", "showNoteButton", "showDownloadButton", "showInfoButton", "showDuplicateButton", "showFormButton", "showCalenderView", "showCardView", "showImportFromOutlookButton", "showKanbanView", "showKanbanViewOfWorkFlowEtat", "showSearchField", "searchFields", "calenderSchema", "showActionButton", "selectKeyOnly", "selectionMode", "selectedItems", "key", "id", "businessClass", "searchOnInit", "showGlobalSearch", "showExportButton", "showReporting"], outputs: ["selectedItemsChange", "searchFieldsValueChanged", "buttonColumnClicked", "onImportFromOutlookClicked"] }] }); }
|
|
52
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiUploadGridComponent, selector: "app-tsi-upload-grid", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<Tsi-Generic-Crud\r\n [cudComponent]=\"comp\"\r\n [header]=\"titleComponent\"\r\n [columns]=\"columns\"\r\n [crudService]=\"_fichierService\"\r\n [modalSize]=\"modalSize\"\r\n [showUploadButton]=\"false\"\r\n [showDownloadButton]=\"true\"\r\n >\r\n</Tsi-Generic-Crud>\r\n", styles: [""], dependencies: [{ kind: "component", type: i2.TsiGenericCrudComponent, selector: "Tsi-Generic-Crud", inputs: ["entityInfo", "modalData", "columns", "gridConfiguration", "cudComponent", "crudService", "header", "modalSize", "descriminatorValue", "presentationSettings", "preventAddEvent", "formEndpoint", "formName", "isSearchButtonDisabled", "showHeaderFilters", "showEditButton", "showDeleteButton", "showAddButton", "showConsultButton", "showUploadButton", "showNoteButton", "showDownloadButton", "showInfoButton", "showDuplicateButton", "showFormButton", "showCalenderView", "showCardView", "showImportFromOutlookButton", "showKanbanView", "showKanbanViewOfWorkFlowEtat", "showSearchField", "searchFields", "calenderSchema", "showActionButton", "sizingMode", "selectKeyOnly", "selectionMode", "selectedItems", "key", "id", "businessClass", "searchOnInit", "showGlobalSearch", "showExportButton", "showReporting"], outputs: ["selectedItemsChange", "searchFieldsValueChanged", "buttonColumnClicked", "onImportFromOutlookClicked"] }] }); }
|
|
53
53
|
}
|
|
54
54
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiUploadGridComponent, decorators: [{
|
|
55
55
|
type: Component,
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { resolveCssSize, isPinnableCssSize } from './grid-col-style.helper';
|
|
2
|
+
/**
|
|
3
|
+
* Single source of truth for the grid column-width feature, shared by every grid
|
|
4
|
+
* (`TsiGenericGridComponent`, `EditableGridComponent`, ...) so the sizing rules never
|
|
5
|
+
* drift between them.
|
|
6
|
+
*
|
|
7
|
+
* Width priority, highest to lowest: (1) the end user's width — a remembered layout
|
|
8
|
+
* or an in-session resize, (2) the developer-preferred width, (3) automatic sizing.
|
|
9
|
+
* Tier (1) is applied by PrimeNG with `!important`; this controller only decides whether
|
|
10
|
+
* the developer width is emitted at all — it yields entirely once the user has taken
|
|
11
|
+
* control, letting PrimeNG's rules win.
|
|
12
|
+
*
|
|
13
|
+
* Eligibility (which columns may receive a developer width / wrapping / top-align) is
|
|
14
|
+
* grid-specific and injected, so each grid keeps its own exclusion set (UC-7).
|
|
15
|
+
*/
|
|
16
|
+
export class ColumnWidthController {
|
|
17
|
+
constructor(isEligible) {
|
|
18
|
+
this.isEligible = isEligible;
|
|
19
|
+
/** True once a saved layout carrying per-column widths has been restored. */
|
|
20
|
+
this.hasRememberedWidths = false;
|
|
21
|
+
/** Fields the end user has manually resized during this session. */
|
|
22
|
+
this.userSizedFields = new Set();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Record whether a restored layout carried the user's remembered column widths.
|
|
26
|
+
* PrimeNG's `TableState.columnWidths` is a comma-separated string; an array is also
|
|
27
|
+
* accepted. Either way an empty/absent value means "no remembered widths".
|
|
28
|
+
*/
|
|
29
|
+
setRemembered(columnWidths) {
|
|
30
|
+
this.hasRememberedWidths = !!(columnWidths && columnWidths.length);
|
|
31
|
+
}
|
|
32
|
+
/** Remember a column the user just resized so its developer-preferred width yields. */
|
|
33
|
+
onResize(field) {
|
|
34
|
+
if (field) {
|
|
35
|
+
this.userSizedFields.add(field);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Forget all end-user width choices (session resizes + remembered layout), so the
|
|
40
|
+
* developer-preferred widths take over again. Call when resetting a grid to its default
|
|
41
|
+
* layout; `setRemembered` is expected to run afterwards to re-seed from the reset config.
|
|
42
|
+
*/
|
|
43
|
+
reset() {
|
|
44
|
+
this.hasRememberedWidths = false;
|
|
45
|
+
this.userSizedFields.clear();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The developer-preferred width as an inline style, or `{}` when it must not apply.
|
|
49
|
+
* A pinnable length (see `isPinnableCssSize`) is pinned with equal
|
|
50
|
+
* `width`/`min-width`/`max-width` so content can't collapse or grow the column; a
|
|
51
|
+
* non-pinnable value (`%`, `calc()`, keyword) degrades to a plain `width` preference.
|
|
52
|
+
*/
|
|
53
|
+
sizeStyle(col) {
|
|
54
|
+
if (!this.developerControls(col)) {
|
|
55
|
+
return {};
|
|
56
|
+
}
|
|
57
|
+
const width = resolveCssSize(col.width);
|
|
58
|
+
if (!width) {
|
|
59
|
+
return {};
|
|
60
|
+
}
|
|
61
|
+
if (!isPinnableCssSize(width)) {
|
|
62
|
+
return { 'width': width };
|
|
63
|
+
}
|
|
64
|
+
return { 'width': width, 'min-width': width, 'max-width': width };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Whether a column's content should wrap to stay inside its width. True for any
|
|
68
|
+
* eligible column with a constrained width — developer-preferred, user-resized, or
|
|
69
|
+
* restored from a saved layout — regardless of which one currently drives the size.
|
|
70
|
+
*/
|
|
71
|
+
shouldWrap(col) {
|
|
72
|
+
return this.isEligible(col)
|
|
73
|
+
&& (isPinnableCssSize(resolveCssSize(col.width))
|
|
74
|
+
|| this.userSizedFields.has(col.field)
|
|
75
|
+
|| this.hasRememberedWidths);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Top-align for eligible data cells, so short cells line up with the first line of a
|
|
79
|
+
* wrapped/multi-line cell in the same (now taller) row. Ineligible columns (per the
|
|
80
|
+
* injected predicate — e.g. action/button/image) get `{}` and keep their default
|
|
81
|
+
* centered alignment.
|
|
82
|
+
*/
|
|
83
|
+
verticalAlign(col) {
|
|
84
|
+
return this.isEligible(col) ? { 'vertical-align': 'top' } : {};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* The developer width may drive the column only while the user has not taken control
|
|
88
|
+
* (no remembered layout, no in-session resize) and the column is eligible. Whether a
|
|
89
|
+
* usable width actually exists is checked by the caller, which resolves it once.
|
|
90
|
+
*/
|
|
91
|
+
developerControls(col) {
|
|
92
|
+
return this.isEligible(col)
|
|
93
|
+
&& !this.hasRememberedWidths
|
|
94
|
+
&& !this.userSizedFields.has(col.field);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLXdpZHRoLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWhlbHBlcnMvY29sdW1uLXdpZHRoLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTVFOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLE9BQU8scUJBQXFCO0lBTTlCLFlBQTZCLFVBQXdDO1FBQXhDLGVBQVUsR0FBVixVQUFVLENBQThCO1FBTHJFLDZFQUE2RTtRQUNyRSx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDcEMsb0VBQW9FO1FBQ25ELG9CQUFlLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUVvQixDQUFDO0lBRTFFOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsWUFBbUQ7UUFDN0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELHVGQUF1RjtJQUN2RixRQUFRLENBQUMsS0FBZ0M7UUFDckMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUs7UUFDRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLEdBQWU7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1QsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBQ0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDdEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsR0FBZTtRQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO2VBQ3BCLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzttQkFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzttQkFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsYUFBYSxDQUFDLEdBQWU7UUFDekIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxpQkFBaUIsQ0FBQyxHQUFlO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7ZUFDcEIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CO2VBQ3pCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdyaWRDb2x1bW4gfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgcmVzb2x2ZUNzc1NpemUsIGlzUGlubmFibGVDc3NTaXplIH0gZnJvbSAnLi9ncmlkLWNvbC1zdHlsZS5oZWxwZXInO1xyXG5cclxuLyoqXHJcbiAqIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBncmlkIGNvbHVtbi13aWR0aCBmZWF0dXJlLCBzaGFyZWQgYnkgZXZlcnkgZ3JpZFxyXG4gKiAoYFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50YCwgYEVkaXRhYmxlR3JpZENvbXBvbmVudGAsIC4uLikgc28gdGhlIHNpemluZyBydWxlcyBuZXZlclxyXG4gKiBkcmlmdCBiZXR3ZWVuIHRoZW0uXHJcbiAqXHJcbiAqIFdpZHRoIHByaW9yaXR5LCBoaWdoZXN0IHRvIGxvd2VzdDogKDEpIHRoZSBlbmQgdXNlcidzIHdpZHRoIOKAlCBhIHJlbWVtYmVyZWQgbGF5b3V0XHJcbiAqIG9yIGFuIGluLXNlc3Npb24gcmVzaXplLCAoMikgdGhlIGRldmVsb3Blci1wcmVmZXJyZWQgd2lkdGgsICgzKSBhdXRvbWF0aWMgc2l6aW5nLlxyXG4gKiBUaWVyICgxKSBpcyBhcHBsaWVkIGJ5IFByaW1lTkcgd2l0aCBgIWltcG9ydGFudGA7IHRoaXMgY29udHJvbGxlciBvbmx5IGRlY2lkZXMgd2hldGhlclxyXG4gKiB0aGUgZGV2ZWxvcGVyIHdpZHRoIGlzIGVtaXR0ZWQgYXQgYWxsIOKAlCBpdCB5aWVsZHMgZW50aXJlbHkgb25jZSB0aGUgdXNlciBoYXMgdGFrZW5cclxuICogY29udHJvbCwgbGV0dGluZyBQcmltZU5HJ3MgcnVsZXMgd2luLlxyXG4gKlxyXG4gKiBFbGlnaWJpbGl0eSAod2hpY2ggY29sdW1ucyBtYXkgcmVjZWl2ZSBhIGRldmVsb3BlciB3aWR0aCAvIHdyYXBwaW5nIC8gdG9wLWFsaWduKSBpc1xyXG4gKiBncmlkLXNwZWNpZmljIGFuZCBpbmplY3RlZCwgc28gZWFjaCBncmlkIGtlZXBzIGl0cyBvd24gZXhjbHVzaW9uIHNldCAoVUMtNykuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ29sdW1uV2lkdGhDb250cm9sbGVyIHtcclxuICAgIC8qKiBUcnVlIG9uY2UgYSBzYXZlZCBsYXlvdXQgY2FycnlpbmcgcGVyLWNvbHVtbiB3aWR0aHMgaGFzIGJlZW4gcmVzdG9yZWQuICovXHJcbiAgICBwcml2YXRlIGhhc1JlbWVtYmVyZWRXaWR0aHMgPSBmYWxzZTtcclxuICAgIC8qKiBGaWVsZHMgdGhlIGVuZCB1c2VyIGhhcyBtYW51YWxseSByZXNpemVkIGR1cmluZyB0aGlzIHNlc3Npb24uICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJTaXplZEZpZWxkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaXNFbGlnaWJsZTogKGNvbDogR3JpZENvbHVtbikgPT4gYm9vbGVhbikgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWNvcmQgd2hldGhlciBhIHJlc3RvcmVkIGxheW91dCBjYXJyaWVkIHRoZSB1c2VyJ3MgcmVtZW1iZXJlZCBjb2x1bW4gd2lkdGhzLlxyXG4gICAgICogUHJpbWVORydzIGBUYWJsZVN0YXRlLmNvbHVtbldpZHRoc2AgaXMgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nOyBhbiBhcnJheSBpcyBhbHNvXHJcbiAgICAgKiBhY2NlcHRlZC4gRWl0aGVyIHdheSBhbiBlbXB0eS9hYnNlbnQgdmFsdWUgbWVhbnMgXCJubyByZW1lbWJlcmVkIHdpZHRoc1wiLlxyXG4gICAgICovXHJcbiAgICBzZXRSZW1lbWJlcmVkKGNvbHVtbldpZHRoczogc3RyaW5nIHwgdW5rbm93bltdIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaGFzUmVtZW1iZXJlZFdpZHRocyA9ICEhKGNvbHVtbldpZHRocyAmJiBjb2x1bW5XaWR0aHMubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogUmVtZW1iZXIgYSBjb2x1bW4gdGhlIHVzZXIganVzdCByZXNpemVkIHNvIGl0cyBkZXZlbG9wZXItcHJlZmVycmVkIHdpZHRoIHlpZWxkcy4gKi9cclxuICAgIG9uUmVzaXplKGZpZWxkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGZpZWxkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNpemVkRmllbGRzLmFkZChmaWVsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRm9yZ2V0IGFsbCBlbmQtdXNlciB3aWR0aCBjaG9pY2VzIChzZXNzaW9uIHJlc2l6ZXMgKyByZW1lbWJlcmVkIGxheW91dCksIHNvIHRoZVxyXG4gICAgICogZGV2ZWxvcGVyLXByZWZlcnJlZCB3aWR0aHMgdGFrZSBvdmVyIGFnYWluLiBDYWxsIHdoZW4gcmVzZXR0aW5nIGEgZ3JpZCB0byBpdHMgZGVmYXVsdFxyXG4gICAgICogbGF5b3V0OyBgc2V0UmVtZW1iZXJlZGAgaXMgZXhwZWN0ZWQgdG8gcnVuIGFmdGVyd2FyZHMgdG8gcmUtc2VlZCBmcm9tIHRoZSByZXNldCBjb25maWcuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaGFzUmVtZW1iZXJlZFdpZHRocyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudXNlclNpemVkRmllbGRzLmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGV2ZWxvcGVyLXByZWZlcnJlZCB3aWR0aCBhcyBhbiBpbmxpbmUgc3R5bGUsIG9yIGB7fWAgd2hlbiBpdCBtdXN0IG5vdCBhcHBseS5cclxuICAgICAqIEEgcGlubmFibGUgbGVuZ3RoIChzZWUgYGlzUGlubmFibGVDc3NTaXplYCkgaXMgcGlubmVkIHdpdGggZXF1YWxcclxuICAgICAqIGB3aWR0aGAvYG1pbi13aWR0aGAvYG1heC13aWR0aGAgc28gY29udGVudCBjYW4ndCBjb2xsYXBzZSBvciBncm93IHRoZSBjb2x1bW47IGFcclxuICAgICAqIG5vbi1waW5uYWJsZSB2YWx1ZSAoYCVgLCBgY2FsYygpYCwga2V5d29yZCkgZGVncmFkZXMgdG8gYSBwbGFpbiBgd2lkdGhgIHByZWZlcmVuY2UuXHJcbiAgICAgKi9cclxuICAgIHNpemVTdHlsZShjb2w6IEdyaWRDb2x1bW4pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICAgICAgICBpZiAoIXRoaXMuZGV2ZWxvcGVyQ29udHJvbHMoY29sKSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gcmVzb2x2ZUNzc1NpemUoY29sLndpZHRoKTtcclxuICAgICAgICBpZiAoIXdpZHRoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc1Bpbm5hYmxlQ3NzU2l6ZSh3aWR0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgJ3dpZHRoJzogd2lkdGggfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgJ3dpZHRoJzogd2lkdGgsICdtaW4td2lkdGgnOiB3aWR0aCwgJ21heC13aWR0aCc6IHdpZHRoIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIGEgY29sdW1uJ3MgY29udGVudCBzaG91bGQgd3JhcCB0byBzdGF5IGluc2lkZSBpdHMgd2lkdGguIFRydWUgZm9yIGFueVxyXG4gICAgICogZWxpZ2libGUgY29sdW1uIHdpdGggYSBjb25zdHJhaW5lZCB3aWR0aCDigJQgZGV2ZWxvcGVyLXByZWZlcnJlZCwgdXNlci1yZXNpemVkLCBvclxyXG4gICAgICogcmVzdG9yZWQgZnJvbSBhIHNhdmVkIGxheW91dCDigJQgcmVnYXJkbGVzcyBvZiB3aGljaCBvbmUgY3VycmVudGx5IGRyaXZlcyB0aGUgc2l6ZS5cclxuICAgICAqL1xyXG4gICAgc2hvdWxkV3JhcChjb2w6IEdyaWRDb2x1bW4pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0VsaWdpYmxlKGNvbClcclxuICAgICAgICAgICAgJiYgKGlzUGlubmFibGVDc3NTaXplKHJlc29sdmVDc3NTaXplKGNvbC53aWR0aCkpXHJcbiAgICAgICAgICAgICAgICB8fCB0aGlzLnVzZXJTaXplZEZpZWxkcy5oYXMoY29sLmZpZWxkKVxyXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5oYXNSZW1lbWJlcmVkV2lkdGhzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRvcC1hbGlnbiBmb3IgZWxpZ2libGUgZGF0YSBjZWxscywgc28gc2hvcnQgY2VsbHMgbGluZSB1cCB3aXRoIHRoZSBmaXJzdCBsaW5lIG9mIGFcclxuICAgICAqIHdyYXBwZWQvbXVsdGktbGluZSBjZWxsIGluIHRoZSBzYW1lIChub3cgdGFsbGVyKSByb3cuIEluZWxpZ2libGUgY29sdW1ucyAocGVyIHRoZVxyXG4gICAgICogaW5qZWN0ZWQgcHJlZGljYXRlIOKAlCBlLmcuIGFjdGlvbi9idXR0b24vaW1hZ2UpIGdldCBge31gIGFuZCBrZWVwIHRoZWlyIGRlZmF1bHRcclxuICAgICAqIGNlbnRlcmVkIGFsaWdubWVudC5cclxuICAgICAqL1xyXG4gICAgdmVydGljYWxBbGlnbihjb2w6IEdyaWRDb2x1bW4pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0VsaWdpYmxlKGNvbCkgPyB7ICd2ZXJ0aWNhbC1hbGlnbic6ICd0b3AnIH0gOiB7fTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkZXZlbG9wZXIgd2lkdGggbWF5IGRyaXZlIHRoZSBjb2x1bW4gb25seSB3aGlsZSB0aGUgdXNlciBoYXMgbm90IHRha2VuIGNvbnRyb2xcclxuICAgICAqIChubyByZW1lbWJlcmVkIGxheW91dCwgbm8gaW4tc2Vzc2lvbiByZXNpemUpIGFuZCB0aGUgY29sdW1uIGlzIGVsaWdpYmxlLiBXaGV0aGVyIGFcclxuICAgICAqIHVzYWJsZSB3aWR0aCBhY3R1YWxseSBleGlzdHMgaXMgY2hlY2tlZCBieSB0aGUgY2FsbGVyLCB3aGljaCByZXNvbHZlcyBpdCBvbmNlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGRldmVsb3BlckNvbnRyb2xzKGNvbDogR3JpZENvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzRWxpZ2libGUoY29sKVxyXG4gICAgICAgICAgICAmJiAhdGhpcy5oYXNSZW1lbWJlcmVkV2lkdGhzXHJcbiAgICAgICAgICAgICYmICF0aGlzLnVzZXJTaXplZEZpZWxkcy5oYXMoY29sLmZpZWxkKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,7 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Resolves a developer-supplied column width into a CSS length string.
|
|
3
|
+
* - a bare `number` is interpreted as `rem` (the natural default)
|
|
4
|
+
* - a `string` is used verbatim (any explicit CSS unit/keyword: px, %, rem, calc(), fit-content, ...)
|
|
5
|
+
* Returns `undefined` when no usable width is provided, so callers can skip the binding entirely.
|
|
6
|
+
*/
|
|
7
|
+
export function resolveCssSize(width) {
|
|
8
|
+
if (width === null || width === undefined) {
|
|
9
|
+
return undefined;
|
|
5
10
|
}
|
|
11
|
+
if (typeof width === 'number') {
|
|
12
|
+
return `${width}rem`;
|
|
13
|
+
}
|
|
14
|
+
const trimmed = width.trim();
|
|
15
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
16
|
+
}
|
|
17
|
+
/** Absolute / viewport length units that establish a definite width base. */
|
|
18
|
+
const PINNABLE_UNIT = /^-?\d*\.?\d+(px|rem|em|vw|vh|vmin|vmax|cm|mm|in|pt|pc|q|ch|ex)$/i;
|
|
19
|
+
/**
|
|
20
|
+
* Whether a resolved CSS size can be used as a hard column floor (min-width) and to
|
|
21
|
+
* cap/wrap the column. True only for definite absolute/viewport lengths (`px`, `rem`,
|
|
22
|
+
* `vw`, ...). False for percentages, `calc()`, and keywords (`auto`, `fit-content`, ...):
|
|
23
|
+
* in a scrollable auto-layout table their base isn't definite, so pinning them collapses
|
|
24
|
+
* the column to its `break-word` min-content (one character). Such widths degrade to a
|
|
25
|
+
* plain `width` preference with no pin and no forced wrap.
|
|
26
|
+
*/
|
|
27
|
+
export function isPinnableCssSize(resolved) {
|
|
28
|
+
return resolved != null && PINNABLE_UNIT.test(resolved.trim());
|
|
6
29
|
}
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jb2wtc3R5bGUuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1oZWxwZXJzL2dyaWQtY29sLXN0eWxlLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBOEI7SUFDekQsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QyxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPLEdBQUcsS0FBSyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QixPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLE1BQU0sYUFBYSxHQUFHLGtFQUFrRSxDQUFDO0FBRXpGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBd0I7SUFDdEQsT0FBTyxRQUFRLElBQUksSUFBSSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBSZXNvbHZlcyBhIGRldmVsb3Blci1zdXBwbGllZCBjb2x1bW4gd2lkdGggaW50byBhIENTUyBsZW5ndGggc3RyaW5nLlxyXG4gKiAtIGEgYmFyZSBgbnVtYmVyYCBpcyBpbnRlcnByZXRlZCBhcyBgcmVtYCAodGhlIG5hdHVyYWwgZGVmYXVsdClcclxuICogLSBhIGBzdHJpbmdgIGlzIHVzZWQgdmVyYmF0aW0gKGFueSBleHBsaWNpdCBDU1MgdW5pdC9rZXl3b3JkOiBweCwgJSwgcmVtLCBjYWxjKCksIGZpdC1jb250ZW50LCAuLi4pXHJcbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiBubyB1c2FibGUgd2lkdGggaXMgcHJvdmlkZWQsIHNvIGNhbGxlcnMgY2FuIHNraXAgdGhlIGJpbmRpbmcgZW50aXJlbHkuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNzc1NpemUod2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh3aWR0aCA9PT0gbnVsbCB8fCB3aWR0aCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygd2lkdGggPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3dpZHRofXJlbWA7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0cmltbWVkID0gd2lkdGgudHJpbSgpO1xyXG4gICAgcmV0dXJuIHRyaW1tZWQubGVuZ3RoID4gMCA/IHRyaW1tZWQgOiB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbi8qKiBBYnNvbHV0ZSAvIHZpZXdwb3J0IGxlbmd0aCB1bml0cyB0aGF0IGVzdGFibGlzaCBhIGRlZmluaXRlIHdpZHRoIGJhc2UuICovXHJcbmNvbnN0IFBJTk5BQkxFX1VOSVQgPSAvXi0/XFxkKlxcLj9cXGQrKHB4fHJlbXxlbXx2d3x2aHx2bWlufHZtYXh8Y218bW18aW58cHR8cGN8cXxjaHxleCkkL2k7XHJcblxyXG4vKipcclxuICogV2hldGhlciBhIHJlc29sdmVkIENTUyBzaXplIGNhbiBiZSB1c2VkIGFzIGEgaGFyZCBjb2x1bW4gZmxvb3IgKG1pbi13aWR0aCkgYW5kIHRvXHJcbiAqIGNhcC93cmFwIHRoZSBjb2x1bW4uIFRydWUgb25seSBmb3IgZGVmaW5pdGUgYWJzb2x1dGUvdmlld3BvcnQgbGVuZ3RocyAoYHB4YCwgYHJlbWAsXHJcbiAqIGB2d2AsIC4uLikuIEZhbHNlIGZvciBwZXJjZW50YWdlcywgYGNhbGMoKWAsIGFuZCBrZXl3b3JkcyAoYGF1dG9gLCBgZml0LWNvbnRlbnRgLCAuLi4pOlxyXG4gKiBpbiBhIHNjcm9sbGFibGUgYXV0by1sYXlvdXQgdGFibGUgdGhlaXIgYmFzZSBpc24ndCBkZWZpbml0ZSwgc28gcGlubmluZyB0aGVtIGNvbGxhcHNlc1xyXG4gKiB0aGUgY29sdW1uIHRvIGl0cyBgYnJlYWstd29yZGAgbWluLWNvbnRlbnQgKG9uZSBjaGFyYWN0ZXIpLiBTdWNoIHdpZHRocyBkZWdyYWRlIHRvIGFcclxuICogcGxhaW4gYHdpZHRoYCBwcmVmZXJlbmNlIHdpdGggbm8gcGluIGFuZCBubyBmb3JjZWQgd3JhcC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1Bpbm5hYmxlQ3NzU2l6ZShyZXNvbHZlZD86IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcclxuICAgIHJldHVybiByZXNvbHZlZCAhPSBudWxsICYmIFBJTk5BQkxFX1VOSVQudGVzdChyZXNvbHZlZC50cmltKCkpO1xyXG59XHJcbiJdfQ==
|