@libs-ui/services-grid-layout 0.2.357-23 → 0.2.357-25

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.
@@ -1,4 +1,4 @@
1
- import { ViewContainerRef } from '@angular/core';
1
+ import { TemplateRef, ViewContainerRef } from '@angular/core';
2
2
  import { GridsterConfig } from 'gridster18';
3
3
  import { T_gridLayout_changeEvent, T_gridLayout_newNode, T_gridLayout_config, T_gridLayout_node } from './interfaces/grid-layout.interface';
4
4
  import * as i0 from "@angular/core";
@@ -97,6 +97,10 @@ export declare class LibsUiGridLayoutService {
97
97
  *
98
98
  * @param host chỗ gắn RIÊNG của ô đó — mỗi khối một `ViewContainerRef`, dùng chung một cái thì
99
99
  * mọi component bị dồn hết vào một ô.
100
+ * @param childCanvas khuôn mặt phẳng LỒNG của khối, chỉ có với khối container tự khai
101
+ * `getComponentOutlet`. Component vỏ nhận nó qua input `childCanvas` và tự đặt vào giữa tiêu đề
102
+ * với phần thân của mình. Không truyền xuống thì vỏ chiếm trọn chiều cao khối và đẩy toàn bộ thẻ
103
+ * con ra ngoài vùng nhìn thấy.
100
104
  */
101
105
  private attachNode;
102
106
  /**
@@ -170,6 +174,18 @@ export declare class LibsUiGridLayoutService {
170
174
  * theo 24 cột còn màn hình chỉ có 12 — khối rơi ra ngoài mép phải mà không ai hiểu vì sao.
171
175
  */
172
176
  get totalColumns(): number;
177
+ /**
178
+ * Chiều cao một hàng lưới (pixel) dùng để tính khung xem trước lúc kéo thả.
179
+ *
180
+ * 🔴 Phải đọc từ `config.rowHeight` của nơi dùng. Trước đây `calculateDropGhost` đóng cứng 68, nên
181
+ * mặt phẳng khai hàng thấp thì khung xem trước cao gấp nhiều lần khối thật — nơi dùng phải ẩn khung
182
+ * của thư viện đi rồi tự vẽ lại.
183
+ */
184
+ get rowStepPx(): number;
185
+ /**
186
+ * Khe NHÌN THẤY giữa hai khối cấp gốc (px). `0` = không áp, giữ đúng hành vi cũ.
187
+ */
188
+ get visualGapPx(): number;
173
189
  /**
174
190
  * Đổi số cột / số hàng của một khối rồi vẽ lại.
175
191
  *
@@ -248,9 +264,29 @@ export declare class LibsUiGridLayoutService {
248
264
  resetZoom: (key?: string) => void;
249
265
  fitToScreen: (cW: number, sW?: number, pad?: number, key?: string) => number;
250
266
  gridsterOptions: (depth: number, cb?: () => void) => GridsterConfig;
251
- attachNode: (node: T_gridLayout_node, depth: number, host: ViewContainerRef) => void;
267
+ attachNode: (node: T_gridLayout_node, depth: number, host: ViewContainerRef, childCanvas?: TemplateRef<unknown>) => void;
252
268
  detachNode: (nodeId: string) => void;
269
+ getNodeElement: (nodeId: string, scope?: ParentNode) => HTMLElement | undefined;
270
+ getNodeCanvasElement: (nodeId: string, scope?: ParentNode) => HTMLElement | undefined;
253
271
  };
272
+ /**
273
+ * Trả về vỏ DOM của một khối theo `id`.
274
+ *
275
+ * 🔴 Nơi dùng cần chạm vào DOM của khối (đo kích thước, gắn lớp phủ riêng) BẮT BUỘC đi qua đây.
276
+ * Trước khi có hàm này, nơi dùng phải tự viết `querySelector('.libs-ui-grid-layout-block-shell[...]')`
277
+ * — tức bám vào tên class NỘI BỘ của thư viện: đổi tên class là màn bên kia vỡ IM LẶNG, biên dịch
278
+ * vẫn xanh vì chuỗi selector không ai kiểm.
279
+ *
280
+ * `scope` giới hạn phạm vi tìm (mặc định cả tài liệu) — cần khi nhiều mặt phẳng cùng nằm trên màn.
281
+ */
282
+ getNodeElement(nodeId: string, scope?: ParentNode): HTMLElement | undefined;
283
+ /**
284
+ * Trả về mặt phẳng LỒNG nằm trong một khối container (khối có con), nếu có.
285
+ *
286
+ * Tách riêng khỏi `getNodeElement` vì nơi dùng thường cần chèn phần tử của mình vào TRƯỚC mặt phẳng
287
+ * lồng này (ví dụ hàng tiêu đề của khối ghép), nên phải cầm đúng nó chứ không phải cả vỏ.
288
+ */
289
+ getNodeCanvasElement(nodeId: string, scope?: ParentNode): HTMLElement | undefined;
254
290
  private applyInputs;
255
291
  static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiGridLayoutService, never>;
256
292
  static ɵprov: i0.ɵɵInjectableDeclaration<LibsUiGridLayoutService>;
@@ -32,6 +32,21 @@ export type T_gridLayout_node = {
32
32
  * ```ts
33
33
  * getComponentOutlet: (node) => from(import('./chart-card.component').then((c) => c.ChartCardComponent))
34
34
  * ```
35
+ *
36
+ * 🔴 Khai cho khối CÓ CON (container) là khai VỎ của khối ghép — hàng tiêu đề, nút thu gọn, nền.
37
+ * Vỏ KHÔNG thay thế mặt phẳng lồng bên trong: thư viện truyền mặt phẳng đó xuống component vỏ qua
38
+ * input `childCanvas: TemplateRef<unknown>`, và vỏ BẮT BUỘC vẽ nó ra bằng `ngTemplateOutlet`, nếu
39
+ * không toàn bộ khối con biến mất khỏi màn.
40
+ *
41
+ * ```html
42
+ * <!-- trong component vỏ -->
43
+ * <div class="flex h-full flex-col">
44
+ * <div class="shrink-0">{{ title() }}</div>
45
+ * <div class="min-h-0 flex-1">
46
+ * <ng-container [ngTemplateOutlet]="childCanvas()" />
47
+ * </div>
48
+ * </div>
49
+ * ```
35
50
  */
36
51
  getComponentOutlet?: (node: T_gridLayout_node) => Observable<Type<unknown>>;
37
52
  /** dữ liệu riêng của nơi dùng — thư viện KHÔNG đọc, chuyển nguyên vào input `data` của component */
@@ -73,6 +88,15 @@ export type T_gridLayout_newNode = Omit<T_gridLayout_node, 'id' | 'x' | 'y'> & {
73
88
  id?: string;
74
89
  x?: number;
75
90
  y?: number;
91
+ /**
92
+ * Bật để GIỮ `x`/`y` truyền vào. Mặc định tắt: thư viện tự xếp khối xuống hàng trống kế tiếp.
93
+ *
94
+ * 🔴 Phải là cờ tường minh, KHÔNG suy ra từ việc có truyền `x`/`y` hay không: `0` vừa là toạ độ
95
+ * hợp lệ vừa là giá trị mọi hàm dựng node điền sẵn, nên đoán nhầm là khối mới đè lên khối cũ.
96
+ *
97
+ * Cờ này chỉ để điều khiển lúc thêm, không được lưu lại trong cây.
98
+ */
99
+ keepPosition?: boolean;
76
100
  };
77
101
  /**
78
102
  * Đi kèm sự kiện bấm nút THÊM trên một container.
@@ -148,6 +172,17 @@ export type T_gridLayout_config = {
148
172
  autoResizeNestedGrids?: boolean;
149
173
  /** khe giữa hai khối ở lưới CẤP TRANG, px. Mặc định 12 */
150
174
  margin?: number;
175
+ /**
176
+ * Khe NHÌN THẤY giữa hai khối cấp trang, px — phần vỏ khối thụt vào nửa khe mỗi cạnh.
177
+ *
178
+ * 🔴 Khác `margin`: `margin` là khe của Ô LƯỚI nên đổi nó là đổi luôn bước kéo và phép tính va
179
+ * chạm. Muốn thẻ trông thưa ra mà bước kéo giữ nguyên thì dùng `visualGap` — ô lưới không đổi,
180
+ * chỉ phần nhìn thấy co lại. Không khai thì không áp gì (giữ đúng hành vi cũ).
181
+ *
182
+ * Chỉ áp cho khối CẤP GỐC; khối con trong container giữ nguyên để không tách rời các dòng của
183
+ * cùng một thẻ.
184
+ */
185
+ visualGap?: number;
151
186
  /** khe giữa hai khối bên TRONG container, px. Mặc định 2 — khối con là dòng thông tin của cùng
152
187
  * một card, khe rộng làm chúng trông như card rời nhau */
153
188
  nestedMargin?: number;
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@libs-ui/services-grid-layout",
3
- "version": "0.2.357-23",
3
+ "version": "0.2.357-25",
4
4
  "peerDependencies": {
5
5
  "@angular/core": "^18.2.0",
6
6
  "@angular/common": "^18.2.0",
7
7
  "gridster18": "npm:angular-gridster2@18.0.1",
8
8
  "rxjs": "~7.8.0",
9
- "@libs-ui/components-buttons-button": "0.2.357-23",
10
- "@libs-ui/utils": "0.2.357-23"
9
+ "@libs-ui/components-buttons-button": "0.2.357-25",
10
+ "@libs-ui/utils": "0.2.357-25"
11
11
  },
12
12
  "sideEffects": false,
13
13
  "module": "fesm2022/libs-ui-services-grid-layout.mjs",