@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.
Files changed (43) hide show
  1. package/esm2022/lib/enums/grid-sizing-mode.mjs +15 -0
  2. package/esm2022/lib/enums/index.mjs +2 -2
  3. package/esm2022/lib/interfaces/grid/grid-configuration.mjs +1 -1
  4. package/esm2022/lib/interfaces/index.mjs +1 -2
  5. package/esm2022/lib/tsi-components/create-or-edit-entity-informations/create-or-edit-entity-informations.component.mjs +1 -1
  6. package/esm2022/lib/tsi-components/create-or-edit-modele-import/create-or-edit-modele-import.component.mjs +4 -5
  7. package/esm2022/lib/tsi-components/input-components/editable-grid/editable-grid.component.mjs +61 -3
  8. package/esm2022/lib/tsi-components/input-components/tsi-rate-input/tsi-rate-input.component.mjs +41 -12
  9. package/esm2022/lib/tsi-components/manage-import-export/manage-import-export.component.mjs +1 -1
  10. package/esm2022/lib/tsi-components/manage-reporting/manage-reporting.component.mjs +3 -5
  11. package/esm2022/lib/tsi-components/modal-component/modal.component.mjs +1 -1
  12. package/esm2022/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.mjs +71 -78
  13. package/esm2022/lib/tsi-components/output-components/tsi-rate-display/tsi-rate-display.component.mjs +15 -5
  14. package/esm2022/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.mjs +7 -4
  15. package/esm2022/lib/tsi-components/tsi-action-erp-create-or-edit/tsi-action-erp-create-or-edit.component.mjs +1 -1
  16. package/esm2022/lib/tsi-components/tsi-action-erp-list/tsi-action-erp-list.component.mjs +1 -1
  17. package/esm2022/lib/tsi-components/tsi-dynamic-form/dynamic-form-list/dynamic-form-list.component.mjs +1 -1
  18. package/esm2022/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.mjs +7 -3
  19. package/esm2022/lib/tsi-components/tsi-notes-grid/tsi-notes-grid.component.mjs +1 -1
  20. package/esm2022/lib/tsi-components/tsi-popup-text-viewer/tsi-popup-text-viewer.component.mjs +1 -1
  21. package/esm2022/lib/tsi-components/tsi-upload-grid/tsi-upload-grid.component.mjs +1 -1
  22. package/esm2022/lib/tsi-helpers/column-width.controller.mjs +97 -0
  23. package/esm2022/lib/tsi-helpers/grid-col-style.helper.mjs +28 -5
  24. package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +4039 -3839
  25. package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
  26. package/lib/consts/app-providers.d.ts +1 -1
  27. package/lib/enums/grid-sizing-mode.d.ts +13 -0
  28. package/lib/enums/index.d.ts +1 -1
  29. package/lib/interfaces/grid/grid-configuration.d.ts +7 -2
  30. package/lib/interfaces/index.d.ts +0 -1
  31. package/lib/tsi-components/input-components/editable-grid/editable-grid.component.d.ts +45 -1
  32. package/lib/tsi-components/input-components/tsi-rate-input/tsi-rate-input.component.d.ts +24 -3
  33. package/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.d.ts +48 -2
  34. package/lib/tsi-components/output-components/tsi-rate-display/tsi-rate-display.component.d.ts +7 -1
  35. package/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.d.ts +3 -2
  36. package/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.d.ts +3 -1
  37. package/lib/tsi-helpers/column-width.controller.d.ts +67 -0
  38. package/lib/tsi-helpers/grid-col-style.helper.d.ts +16 -5
  39. package/package.json +1 -1
  40. package/esm2022/lib/enums/css-units.mjs +0 -10
  41. package/esm2022/lib/interfaces/styles/css-size-property.mjs +0 -17
  42. package/lib/enums/css-units.d.ts +0 -8
  43. 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,
@@ -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
- import { CSSUnits } from "../enums/css-units";
2
- export class GridColumnStyleHelper {
3
- static createWidthStyle(widthUnit = CSSUnits.VW, width, minWidth, maxWidth) {
4
- return { 'width': 'fit-content' };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jb2wtc3R5bGUuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1oZWxwZXJzL2dyaWQtY29sLXN0eWxlLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsTUFBTSxPQUFPLHFCQUFxQjtJQUN2QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsWUFBb0IsUUFBUSxDQUFDLEVBQUUsRUFBQyxLQUFxQixFQUFFLFFBQXdCLEVBQUMsUUFBd0I7UUFDbkksT0FBTyxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUMsQ0FBQTtJQUNuQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDU1NVbml0cyB9IGZyb20gXCIuLi9lbnVtcy9jc3MtdW5pdHNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkQ29sdW1uU3R5bGVIZWxwZXIge1xyXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVXaWR0aFN0eWxlKHdpZHRoVW5pdDogc3RyaW5nID0gQ1NTVW5pdHMuVlcsd2lkdGg/OiBudW1iZXIgfCBudWxsLCBtaW5XaWR0aD86IG51bWJlciB8IG51bGwsbWF4V2lkdGg/OiBudW1iZXIgfCBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHsnd2lkdGgnOiAnZml0LWNvbnRlbnQnfVxyXG4gICAgfVxyXG59Il19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jb2wtc3R5bGUuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1oZWxwZXJzL2dyaWQtY29sLXN0eWxlLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBOEI7SUFDekQsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QyxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPLEdBQUcsS0FBSyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QixPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLE1BQU0sYUFBYSxHQUFHLGtFQUFrRSxDQUFDO0FBRXpGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBd0I7SUFDdEQsT0FBTyxRQUFRLElBQUksSUFBSSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBSZXNvbHZlcyBhIGRldmVsb3Blci1zdXBwbGllZCBjb2x1bW4gd2lkdGggaW50byBhIENTUyBsZW5ndGggc3RyaW5nLlxyXG4gKiAtIGEgYmFyZSBgbnVtYmVyYCBpcyBpbnRlcnByZXRlZCBhcyBgcmVtYCAodGhlIG5hdHVyYWwgZGVmYXVsdClcclxuICogLSBhIGBzdHJpbmdgIGlzIHVzZWQgdmVyYmF0aW0gKGFueSBleHBsaWNpdCBDU1MgdW5pdC9rZXl3b3JkOiBweCwgJSwgcmVtLCBjYWxjKCksIGZpdC1jb250ZW50LCAuLi4pXHJcbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiBubyB1c2FibGUgd2lkdGggaXMgcHJvdmlkZWQsIHNvIGNhbGxlcnMgY2FuIHNraXAgdGhlIGJpbmRpbmcgZW50aXJlbHkuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNzc1NpemUod2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh3aWR0aCA9PT0gbnVsbCB8fCB3aWR0aCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygd2lkdGggPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3dpZHRofXJlbWA7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0cmltbWVkID0gd2lkdGgudHJpbSgpO1xyXG4gICAgcmV0dXJuIHRyaW1tZWQubGVuZ3RoID4gMCA/IHRyaW1tZWQgOiB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbi8qKiBBYnNvbHV0ZSAvIHZpZXdwb3J0IGxlbmd0aCB1bml0cyB0aGF0IGVzdGFibGlzaCBhIGRlZmluaXRlIHdpZHRoIGJhc2UuICovXHJcbmNvbnN0IFBJTk5BQkxFX1VOSVQgPSAvXi0/XFxkKlxcLj9cXGQrKHB4fHJlbXxlbXx2d3x2aHx2bWlufHZtYXh8Y218bW18aW58cHR8cGN8cXxjaHxleCkkL2k7XHJcblxyXG4vKipcclxuICogV2hldGhlciBhIHJlc29sdmVkIENTUyBzaXplIGNhbiBiZSB1c2VkIGFzIGEgaGFyZCBjb2x1bW4gZmxvb3IgKG1pbi13aWR0aCkgYW5kIHRvXHJcbiAqIGNhcC93cmFwIHRoZSBjb2x1bW4uIFRydWUgb25seSBmb3IgZGVmaW5pdGUgYWJzb2x1dGUvdmlld3BvcnQgbGVuZ3RocyAoYHB4YCwgYHJlbWAsXHJcbiAqIGB2d2AsIC4uLikuIEZhbHNlIGZvciBwZXJjZW50YWdlcywgYGNhbGMoKWAsIGFuZCBrZXl3b3JkcyAoYGF1dG9gLCBgZml0LWNvbnRlbnRgLCAuLi4pOlxyXG4gKiBpbiBhIHNjcm9sbGFibGUgYXV0by1sYXlvdXQgdGFibGUgdGhlaXIgYmFzZSBpc24ndCBkZWZpbml0ZSwgc28gcGlubmluZyB0aGVtIGNvbGxhcHNlc1xyXG4gKiB0aGUgY29sdW1uIHRvIGl0cyBgYnJlYWstd29yZGAgbWluLWNvbnRlbnQgKG9uZSBjaGFyYWN0ZXIpLiBTdWNoIHdpZHRocyBkZWdyYWRlIHRvIGFcclxuICogcGxhaW4gYHdpZHRoYCBwcmVmZXJlbmNlIHdpdGggbm8gcGluIGFuZCBubyBmb3JjZWQgd3JhcC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1Bpbm5hYmxlQ3NzU2l6ZShyZXNvbHZlZD86IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcclxuICAgIHJldHVybiByZXNvbHZlZCAhPSBudWxsICYmIFBJTk5BQkxFX1VOSVQudGVzdChyZXNvbHZlZC50cmltKCkpO1xyXG59XHJcbiJdfQ==