ngx-kit 7.1.0 → 7.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/ngx-kit-date-picker.mjs +7 -1
- package/fesm2022/ngx-kit-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-kit-drag-resize.mjs +76 -104
- package/fesm2022/ngx-kit-drag-resize.mjs.map +1 -1
- package/fesm2022/ngx-kit-drawer-menu.mjs +1 -1
- package/fesm2022/ngx-kit-drawer-menu.mjs.map +1 -1
- package/fesm2022/ngx-kit-form-field.mjs +9 -3
- package/fesm2022/ngx-kit-form-field.mjs.map +1 -1
- package/fesm2022/ngx-kit-grid-layout.mjs +18 -16
- package/fesm2022/ngx-kit-grid-layout.mjs.map +1 -1
- package/fesm2022/ngx-kit-message.mjs +1 -1
- package/fesm2022/ngx-kit-message.mjs.map +1 -1
- package/fesm2022/ngx-kit-shared.mjs +64 -1
- package/fesm2022/ngx-kit-shared.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ngx-kit-date-picker.d.ts +14 -11
- package/types/ngx-kit-drag-resize.d.ts +44 -44
- package/types/ngx-kit-form-field.d.ts +26 -23
- package/types/ngx-kit-shared.d.ts +39 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-kit-grid-layout.mjs","sources":["../../../projects/libs/grid-layout/options/options.ts","../../../projects/libs/grid-layout/options/grid-item-config.ts","../../../projects/libs/grid-layout/utils/collision.ts","../../../projects/libs/grid-layout/utils/compaction.ts","../../../projects/libs/grid-layout/utils/geometry.ts","../../../projects/libs/grid-layout/services/grid-layout.service.ts","../../../projects/libs/grid-layout/grid-layout/grid-layout.component.ts","../../../projects/libs/grid-layout/grid-item/grid-item.component.ts","../../../projects/libs/grid-layout/ngx-grid-layout.module.ts","../../../projects/libs/grid-layout/ngx-kit-grid-layout.ts"],"sourcesContent":["export type GridFlow = 'free' | 'horizontal' | 'vertical';\r\nexport type CompactMode = 'none' | 'vertical' | 'horizontal' | 'both';\r\n\r\nexport interface IGridBackgroundCfg {\r\n show?: 'never' | 'always' | 'whenDragging';\r\n borderColor?: string;\r\n gapColor?: string;\r\n rowColor?: string;\r\n columnColor?: string;\r\n borderWidth?: number;\r\n}\r\n\r\nexport interface IGridLayoutOptions {\r\n cols: number;\r\n rowHeight: number | 'fit';\r\n gap?: number;\r\n padding?: number;\r\n flow?: GridFlow;\r\n compact?: CompactMode;\r\n allowOverlap?: boolean;\r\n pushItems?: boolean;\r\n /** When two items would swap places, prefer swapping over cascading a push. */\r\n swap?: boolean;\r\n dragThreshold?: number;\r\n animate?: boolean;\r\n /**\r\n * `true` / `false` force a direction; `'auto'` (default) reads the host element's\r\n * computed `direction`, so the grid follows the surrounding page automatically.\r\n */\r\n rtl?: boolean | 'auto';\r\n /** Caps the number of rows the grid can grow to. `undefined` = unbounded. */\r\n maxRows?: number;\r\n gridBackgroundConfig?: IGridBackgroundCfg;\r\n}\r\n\r\nexport class GridLayoutOptions implements IGridLayoutOptions {\r\n cols = 12;\r\n rowHeight: number | 'fit' = 50;\r\n gap = 8;\r\n padding = 0;\r\n flow = 'free' as GridFlow;\r\n compact = 'vertical' as CompactMode;\r\n allowOverlap = false;\r\n pushItems = true;\r\n swap = false;\r\n dragThreshold = 3;\r\n animate = true;\r\n rtl = 'auto' as boolean | 'auto';\r\n maxRows?: number;\r\n gridBackgroundConfig: IGridBackgroundCfg = {\r\n show: 'always' as const,\r\n borderColor: 'rgba(128,128,128,.16)',\r\n gapColor: 'transparent',\r\n rowColor: 'rgba(128,128,128,.07)',\r\n columnColor: 'rgba(128,128,128,.07)',\r\n borderWidth: 1,\r\n };\r\n}\r\n","export class GridItemConfig {\r\n x: number;\r\n y: number;\r\n w: number;\r\n h: number;\r\n minW?: number;\r\n minH?: number;\r\n maxW?: number;\r\n maxH?: number;\r\n /** Item can't be dragged or resized, and never moves during compaction/push. */\r\n static?: boolean;\r\n /** Overrides the layout-level draggable/resizable flags for this item only. */\r\n isDraggable?: boolean;\r\n isResizable?: boolean;\r\n\r\n constructor(x: number = 0, y: number = 0, w: number = 1, h: number = 1, s?: boolean) {\r\n this.x = x;\r\n this.y = y;\r\n this.w = w;\r\n this.h = h;\r\n this.static = s == true;\r\n }\r\n}\r\n\r\nexport const normalizeGridItem = (value?: Partial<GridItemConfig>): GridItemConfig => ({\r\n x: Math.max(0, Math.floor(value?.x ?? 0)),\r\n y: Math.max(0, Math.floor(value?.y ?? 0)),\r\n w: Math.max(1, Math.floor(value?.w ?? 1)),\r\n h: Math.max(1, Math.floor(value?.h ?? 1)),\r\n minW: value?.minW,\r\n minH: value?.minH,\r\n maxW: value?.maxW,\r\n maxH: value?.maxH,\r\n static: value?.static ?? false,\r\n isDraggable: value?.isDraggable,\r\n isResizable: value?.isResizable,\r\n});\r\n\r\n/**\r\n * Value equality for two (already-normalized) configs.\r\n *\r\n * This is what breaks the register -> settle -> new-object -> re-register\r\n * feedback loop: signals compare by *reference*, so anything that recomputes\r\n * a fresh config object on every change-detection pass (a `computed()` layout,\r\n * an inline object literal in a template, etc.) will always look \"changed\" to\r\n * an `effect()` even when nothing meaningful did. Callers must compare by\r\n * value before writing back to a signal, otherwise the write itself produces\r\n * a new reference that trips the same effect again — forever.\r\n */\r\nexport function gridItemConfigsEqual(a: GridItemConfig, b: GridItemConfig): boolean {\r\n return (\r\n a.x === b.x &&\r\n a.y === b.y &&\r\n a.w === b.w &&\r\n a.h === b.h &&\r\n (a.minW ?? null) === (b.minW ?? null) &&\r\n (a.minH ?? null) === (b.minH ?? null) &&\r\n (a.maxW ?? null) === (b.maxW ?? null) &&\r\n (a.maxH ?? null) === (b.maxH ?? null) &&\r\n !!a.static === !!b.static &&\r\n (a.isDraggable ?? null) === (b.isDraggable ?? null) &&\r\n (a.isResizable ?? null) === (b.isResizable ?? null)\r\n );\r\n}\r\n","import { GridItemConfig } from '../options/grid-item-config';\r\n\r\nexport interface LayoutNode {\r\n id: string;\r\n config: GridItemConfig;\r\n}\r\n\r\n/** Axis-aligned bounding-box overlap test in grid-cell space. */\r\nexport function collides(a: GridItemConfig, b: GridItemConfig): boolean {\r\n return a.x < b.x + b.w && a.x + a.w > b.x && a.y < b.y + b.h && a.y + a.h > b.y;\r\n}\r\n\r\n/** First item (other than `self`) whose cells overlap `config`, or null. */\r\nexport function getFirstCollision<T extends LayoutNode>(items: readonly T[], selfId: string, config: GridItemConfig): T | null {\r\n for (const item of items) {\r\n if (item.id === selfId) continue;\r\n if (collides(item.config, config)) return item;\r\n }\r\n return null;\r\n}\r\n\r\n/** All items whose cells overlap `config`, excluding `selfId`. */\r\nexport function getAllCollisions<T extends LayoutNode>(items: readonly T[], selfId: string, config: GridItemConfig): T[] {\r\n return items.filter((item) => item.id !== selfId && collides(item.config, config));\r\n}\r\n","import { GridItemConfig } from '../options/grid-item-config';\r\nimport type { CompactMode } from '../options/options';\r\nimport { LayoutNode, collides, getFirstCollision } from './collision';\r\n\r\nexport interface MoveOptions {\r\n cols: number;\r\n compact: CompactMode;\r\n allowOverlap: boolean;\r\n maxRows?: number;\r\n}\r\n\r\nfunction isStatic(node: LayoutNode): boolean {\r\n return !!node.config.static;\r\n}\r\n\r\nfunction clampToCols(config: GridItemConfig, cols: number): void {\r\n config.w = Math.min(Math.max(1, config.w), cols);\r\n config.x = Math.max(0, Math.min(config.x, cols - config.w));\r\n config.y = Math.max(0, config.y);\r\n}\r\n\r\nfunction clone<T extends LayoutNode>(items: readonly T[]): T[] {\r\n return items.map((i) => ({ ...i, config: { ...i.config } })) as T[];\r\n}\r\n\r\n/**\r\n * Moves `id` to grid cell (x, y) and, unless overlap is explicitly allowed,\r\n * cascades any resulting collisions by pushing the colliding items out of the\r\n * way (downward for vertical-flow grids, rightward for horizontal-flow ones).\r\n * Static items are treated as fixed obstacles: they block, but never move.\r\n * Pure function — returns a new array, never mutates its input.\r\n */\r\nexport function moveItem<T extends LayoutNode>(\r\n items: readonly T[],\r\n id: string,\r\n x: number,\r\n y: number,\r\n opts: MoveOptions,\r\n depth = 0,\r\n): T[] {\r\n let arr = clone(items);\r\n const item = arr.find((i) => i.id === id);\r\n if (!item || isStatic(item)) return arr;\r\n\r\n item.config.x = x;\r\n item.config.y = y;\r\n clampToCols(item.config, opts.cols);\r\n\r\n if (opts.allowOverlap || depth > arr.length + 24) return arr;\r\n\r\n const compareFn = compareForCompaction(opts.compact);\r\n let guard = 0;\r\n while (guard++ < arr.length + 24) {\r\n const mover = arr.find((i) => i.id === id)!;\r\n const staticBlocker = arr.find(\r\n (i) => i.id !== id && isStatic(i) && collides(mover.config, i.config),\r\n );\r\n if (staticBlocker) {\r\n if (opts.compact === 'horizontal') {\r\n mover.config.x = staticBlocker.config.x + staticBlocker.config.w;\r\n } else {\r\n mover.config.y = staticBlocker.config.y + staticBlocker.config.h;\r\n }\r\n clampToCols(mover.config, opts.cols);\r\n continue; // the new position may collide with something else — re-check from the top.\r\n }\r\n\r\n const blockers = arr\r\n .filter((i) => i.id !== id && !isStatic(i) && collides(mover.config, i.config))\r\n .sort(compareFn);\r\n if (blockers.length === 0) break;\r\n arr = pushAway(arr, mover, blockers[0], opts, depth + 1);\r\n }\r\n return arr;\r\n}\r\n\r\nfunction pushAway<T extends LayoutNode>(\r\n items: T[],\r\n mover: T,\r\n blocked: T,\r\n opts: MoveOptions,\r\n depth: number,\r\n): T[] {\r\n const targetX =\r\n opts.compact === 'horizontal' ? mover.config.x + mover.config.w : blocked.config.x;\r\n const targetY =\r\n opts.compact === 'horizontal' ? blocked.config.y : mover.config.y + mover.config.h;\r\n return moveItem(items, blocked.id, targetX, targetY, opts, depth);\r\n}\r\n\r\nfunction compareForCompaction(mode: CompactMode) {\r\n return (a: LayoutNode, b: LayoutNode) =>\r\n mode === 'horizontal'\r\n ? a.config.x - b.config.x || a.config.y - b.config.y\r\n : a.config.y - b.config.y || a.config.x - b.config.x;\r\n}\r\n\r\n/**\r\n * When the actively-moved item directly overlaps exactly one same-size item,\r\n * exchanging their positions reads much better than a cascading push. The\r\n * caller (service) decides when to offer this vs. falling back to `moveItem`.\r\n */\r\nexport function trySwap<T extends LayoutNode>(\r\n items: readonly T[],\r\n id: string,\r\n previous: GridItemConfig,\r\n next: GridItemConfig,\r\n): T[] | null {\r\n if (items.some((i) => i.id !== id && isStatic(i) && collides(i.config, next))) return null;\r\n const collisions = items.filter((i) => i.id !== id && !isStatic(i) && collides(i.config, next));\r\n if (collisions.length !== 1) return null;\r\n const [target] = collisions;\r\n if (target.config.w !== next.w || target.config.h !== next.h) return null;\r\n const arr = clone(items);\r\n const mover = arr.find((i) => i.id === id)!;\r\n const other = arr.find((i) => i.id === target.id)!;\r\n mover.config.x = next.x;\r\n mover.config.y = next.y;\r\n other.config.x = previous.x;\r\n other.config.y = previous.y;\r\n return arr;\r\n}\r\n\r\n/**\r\n * Removes gaps by pulling every non-static item as far toward the start of the\r\n * grid as it can go without overlapping another item, in reading order.\r\n */\r\nexport function compact<T extends LayoutNode>(items: readonly T[], mode: CompactMode): T[] {\r\n const arr = clone(items);\r\n if (mode === 'none') return arr;\r\n const canX = mode === 'horizontal' || mode === 'both';\r\n const canY = mode === 'vertical' || mode === 'both';\r\n const sorted = [...arr].sort((a, b) => a.config.y - b.config.y || a.config.x - b.config.x);\r\n for (const item of sorted) {\r\n if (isStatic(item)) continue;\r\n if (canY) {\r\n let y = item.config.y;\r\n while (y > 0 && !getFirstCollision(arr, item.id, { ...item.config, y: y - 1 })) y--;\r\n item.config.y = y;\r\n }\r\n if (canX) {\r\n let x = item.config.x;\r\n while (x > 0 && !getFirstCollision(arr, item.id, { ...item.config, x: x - 1 })) x--;\r\n item.config.x = x;\r\n }\r\n }\r\n return arr;\r\n}\r\n\r\n/** Highest occupied row (0-based, exclusive) across all items — drives the grid's auto-height. */\r\nexport function maxOccupiedRow(items: readonly LayoutNode[]): number {\r\n return items.reduce((max, i) => Math.max(max, i.config.y + i.config.h), 0);\r\n}\r\n\r\n/**\r\n * Finds a cell for `config` that doesn't collide with any existing item.\r\n * Tries the requested (x, y) first; if that's already occupied, scans\r\n * forward in reading order (row by row, top to bottom, left to right — the\r\n * caller is responsible for any RTL flipping when it turns this back into\r\n * pixels) for the first gap large enough to fit it.\r\n *\r\n * This is what a newly-registered item (or one whose config changes to a\r\n * position that's no longer free) should go through instead of silently\r\n * overlapping whatever's already there: unlike a drag/resize, registering an\r\n * item isn't a deliberate \"make room for me\" gesture, so relocating the new\r\n * item to open space reads far better than shoving already-placed items\r\n * around to accommodate it.\r\n */\r\nexport function findFreeSpot<T extends LayoutNode>(\r\n items: readonly T[],\r\n config: GridItemConfig,\r\n cols: number,\r\n excludeId?: string,\r\n): { x: number; y: number } {\r\n const others = excludeId ? items.filter((i) => i.id !== excludeId) : items;\r\n const fits = (x: number, y: number) => !others.some((i) => collides(i.config, { ...config, x, y }));\r\n\r\n const startX = Math.max(0, Math.min(config.x, cols - config.w));\r\n const startY = Math.max(0, config.y);\r\n if (fits(startX, startY)) return { x: startX, y: startY };\r\n\r\n // The row just past the current bottom is always fully empty, so this loop\r\n // is guaranteed to find a fit no later than `maxY`.\r\n const maxY = maxOccupiedRow(others) + 1;\r\n for (let y = 0; y <= maxY; y++) {\r\n for (let x = 0; x <= cols - config.w; x++) {\r\n if (fits(x, y)) return { x, y };\r\n }\r\n }\r\n return { x: startX, y: maxY + 1 };\r\n}\r\n","import { GridItemConfig } from '../options/grid-item-config';\r\nimport { IGridLayoutOptions } from '../options/options';\r\n\r\n/**\r\n * All pixel <-> grid-cell math lives here, in one RTL-aware place.\r\n *\r\n * Grid coordinates are always *logical* (reading-order): x = 0 is the first\r\n * column in the direction text flows — the left edge in LTR, the right edge\r\n * in RTL. Every physical (CSS `left`/pixel) calculation goes through here so\r\n * the rest of the codebase never has to think about direction again.\r\n */\r\nexport interface GridMetrics {\r\n /** Inner content width available for columns (container width minus padding). */\r\n contentWidth: number;\r\n colWidth: number;\r\n rowHeight: number;\r\n gap: number;\r\n padding: number;\r\n}\r\n\r\nexport function computeMetrics(containerWidth: number, options: IGridLayoutOptions): GridMetrics {\r\n const cols = Math.max(1, Math.floor(options.cols));\r\n const gap = options.gap ?? 0;\r\n const padding = options.padding ?? 0;\r\n const contentWidth = Math.max(0, containerWidth - padding * 2);\r\n const colWidth = Math.max(1, (contentWidth - gap * (cols - 1)) / cols);\r\n const rowHeight = options.rowHeight === 'fit' ? Math.max(1, colWidth) : Math.max(1, options.rowHeight);\r\n return { contentWidth, colWidth, rowHeight, gap, padding };\r\n}\r\n\r\n/** Physical CSS `left` (px, relative to the grid surface's content box) for a logical column. */\r\nexport function colToLeft(colIndex: number, spanCols: number, m: GridMetrics, rtl: boolean): number {\r\n if (!rtl) return m.padding + colIndex * (m.colWidth + m.gap);\r\n const widthPx = spanCols * m.colWidth + (spanCols - 1) * m.gap;\r\n const rightEdge = m.padding + colIndex * (m.colWidth + m.gap);\r\n return m.contentWidth + m.padding - rightEdge - widthPx;\r\n}\r\n\r\nexport function rowToTop(rowIndex: number, m: GridMetrics): number {\r\n return m.padding + rowIndex * (m.rowHeight + m.gap);\r\n}\r\n\r\nexport function spanToWidthPx(spanCols: number, m: GridMetrics): number {\r\n return spanCols * m.colWidth + Math.max(0, spanCols - 1) * m.gap;\r\n}\r\n\r\nexport function spanToHeightPx(spanRows: number, m: GridMetrics): number {\r\n return spanRows * m.rowHeight + Math.max(0, spanRows - 1) * m.gap;\r\n}\r\n\r\n/** Physical left px (as above) -> nearest logical column index. Inverse of `colToLeft`. */\r\nexport function leftToCol(leftPx: number, spanCols: number, m: GridMetrics, rtl: boolean): number {\r\n if (!rtl) return Math.round((leftPx - m.padding) / (m.colWidth + m.gap));\r\n const widthPx = spanCols * m.colWidth + (spanCols - 1) * m.gap;\r\n const rightEdge = m.contentWidth + m.padding - leftPx - widthPx;\r\n return Math.round((rightEdge - m.padding) / (m.colWidth + m.gap));\r\n}\r\n\r\nexport function topToRow(topPx: number, m: GridMetrics): number {\r\n return Math.round((topPx - m.padding) / (m.rowHeight + m.gap));\r\n}\r\n\r\n/** Places an item's pixel box (left/top/width/height) inside the grid surface, RTL-aware. */\r\nexport function placeItem(config: GridItemConfig, m: GridMetrics, rtl: boolean): { left: number; top: number; width: number; height: number } {\r\n return {\r\n left: colToLeft(config.x, config.w, m, rtl),\r\n top: rowToTop(config.y, m),\r\n width: spanToWidthPx(config.w, m),\r\n height: spanToHeightPx(config.h, m),\r\n };\r\n}\r\n","import { Injectable, computed, effect, signal } from '@angular/core';\r\nimport { GridLayoutOptions, IGridLayoutOptions } from '../options/options';\r\nimport {\r\n normalizeGridItem,\r\n gridItemConfigsEqual,\r\n GridItemConfig,\r\n} from '../options/grid-item-config';\r\nimport { LayoutOutput } from '../options/layout-output';\r\nimport { computeMetrics, leftToCol, placeItem, topToRow, GridMetrics } from '../utils/geometry';\r\nimport { compact, maxOccupiedRow, moveItem, trySwap, findFreeSpot } from '../utils/compaction';\r\nimport { isRtl } from 'ngx-kit/drag-resize';\r\n\r\nexport interface GridItemState {\r\n id: string;\r\n config: GridItemConfig;\r\n element?: HTMLElement;\r\n dragging?: boolean;\r\n resizing?: boolean;\r\n}\r\n\r\n/** Structural + value equality for two item-state arrays (order-independent). */\r\nfunction itemsEqual(a: readonly GridItemState[], b: readonly GridItemState[]): boolean {\r\n if (a.length !== b.length) return false;\r\n return a.every((itemA) => {\r\n const itemB = b.find((x) => x.id === itemA.id);\r\n return (\r\n !!itemB && itemA.element === itemB.element && gridItemConfigsEqual(itemA.config, itemB.config)\r\n );\r\n });\r\n}\r\n\r\n/** Value equality for two options objects — see `setOptions` for why this matters. */\r\nfunction optionsEqual(a: GridLayoutOptions, b: GridLayoutOptions): boolean {\r\n const bg1 = a.gridBackgroundConfig ?? {};\r\n const bg2 = b.gridBackgroundConfig ?? {};\r\n return (\r\n a.cols === b.cols &&\r\n a.rowHeight === b.rowHeight &&\r\n a.gap === b.gap &&\r\n a.padding === b.padding &&\r\n a.flow === b.flow &&\r\n a.compact === b.compact &&\r\n a.allowOverlap === b.allowOverlap &&\r\n a.pushItems === b.pushItems &&\r\n a.swap === b.swap &&\r\n a.dragThreshold === b.dragThreshold &&\r\n a.animate === b.animate &&\r\n a.rtl === b.rtl &&\r\n (a.maxRows ?? null) === (b.maxRows ?? null) &&\r\n bg1.show === bg2.show &&\r\n bg1.borderColor === bg2.borderColor &&\r\n bg1.gapColor === bg2.gapColor &&\r\n bg1.rowColor === bg2.rowColor &&\r\n bg1.columnColor === bg2.columnColor &&\r\n bg1.borderWidth === bg2.borderWidth\r\n );\r\n}\r\n\r\n@Injectable()\r\nexport class GridLayoutService {\r\n readonly options = signal<GridLayoutOptions>(new GridLayoutOptions());\r\n readonly items = signal<readonly GridItemState[]>([]);\r\n readonly editMode = signal(true);\r\n readonly activeId = signal<string | null>(null);\r\n readonly isInteracting = computed(() => this.activeId() !== null);\r\n readonly height = computed(() => this.calculateHeight(this.items(), this.options()));\r\n readonly layout = computed<LayoutOutput[]>(() =>\r\n this.items().map((x) => ({ id: x.id, ...x.config })),\r\n );\r\n readonly columns = computed(() => Math.max(1, Math.floor(this.options().cols)));\r\n\r\n readonly rtl = computed(() => {\r\n this.rtlTick();\r\n return this.resolveRtl();\r\n });\r\n private rtlTick = signal(0);\r\n\r\n private layoutListener?: (layout: LayoutOutput[]) => void;\r\n private startConfig: GridItemConfig | null = null;\r\n private startItems: readonly GridItemState[] | null = null;\r\n private previewItems = signal<readonly GridItemState[] | null>(null);\r\n private _element!: HTMLElement;\r\n private placeholder?: HTMLElement;\r\n\r\n constructor() {\r\n effect(() => {\r\n // Re-run whenever options or items change so CSS positions always reflect state.\r\n this.options();\r\n this.items();\r\n this.previewItems();\r\n this.rtlTick();\r\n if (this._element) this.applyCss();\r\n });\r\n }\r\n\r\n connect(onLayout: (layout: LayoutOutput[]) => void): void {\r\n this.layoutListener = onLayout;\r\n }\r\n setOptions(value: Partial<IGridLayoutOptions>): void {\r\n const next = Object.assign(new GridLayoutOptions(), this.options(), value);\r\n if (optionsEqual(this.options(), next)) return;\r\n this.options.set(next);\r\n }\r\n setEditMode(value: boolean): void {\r\n this.editMode.set(value);\r\n }\r\n setItems(items: GridItemState[]): void {\r\n this.items.set(items.map((x) => ({ ...x, config: normalizeGridItem(x.config) })));\r\n this.settle();\r\n this.emit();\r\n }\r\n\r\n registerItem(item: GridItemState): void {\r\n const existing = this.items().find((x) => x.id === item.id);\r\n if (!existing) {\r\n const normalized = normalizeGridItem(item.config);\r\n const placed = this.options().allowOverlap\r\n ? normalized\r\n : { ...normalized, ...findFreeSpot(this.items(), normalized, this.columns()) };\r\n this.items.update((xs) => [...xs, { ...item, config: placed }]);\r\n this.settle();\r\n return;\r\n }\r\n if (existing.element === item.element) return;\r\n this.items.update((xs) =>\r\n xs.map((x) => (x.id === item.id ? { ...x, element: item.element } : x)),\r\n );\r\n }\r\n\r\n updateItemConfig(id: string, config: GridItemConfig): void {\r\n const existing = this.items().find((x) => x.id === id);\r\n if (!existing) return;\r\n const normalized = normalizeGridItem(config);\r\n const placed = this.options().allowOverlap\r\n ? normalized\r\n : { ...normalized, ...findFreeSpot(this.items(), normalized, this.columns(), id) };\r\n if (gridItemConfigsEqual(existing.config, placed)) return;\r\n this.items.update((xs) => xs.map((x) => (x.id === id ? { ...x, config: placed } : x)));\r\n this.settle();\r\n }\r\n unregisterItem(id: string): void {\r\n this.items.update((xs) => xs.filter((x) => x.id !== id));\r\n this.settle();\r\n this.emit();\r\n }\r\n\r\n /** Called once the grid surface element exists (e.g. from `ngAfterViewInit`). */\r\n attachElement(el: HTMLElement): void {\r\n this._element = el;\r\n this.placeholder =\r\n (el.querySelector('.ngx-grid-layout__placeholder') as HTMLElement | null) ?? undefined;\r\n if (this.placeholder) {\r\n this.placeholder.style.position = 'absolute';\r\n this.placeholder.style.display = 'none';\r\n this.placeholder.style.pointerEvents = 'none';\r\n this.placeholder.setAttribute('aria-hidden', 'true');\r\n }\r\n // `rtl` reads `this._element` directly (it isn't a signal), so bump a tick\r\n // signal to force the `rtl` computed to re-evaluate now that the element,\r\n // and therefore its computed `direction`, is known.\r\n this.rtlTick.update((n) => n + 1);\r\n this.applyCss();\r\n }\r\n\r\n /** Recomputes pixel positions after the surface resizes. Call from a `ResizeObserver`. */\r\n refreshMetrics(): void {\r\n this.applyCss();\r\n }\r\n\r\n isItemDraggable(item: GridItemState): boolean {\r\n return this.editMode() && !item.config.static && (item.config.isDraggable ?? true);\r\n }\r\n isItemResizable(item: GridItemState): boolean {\r\n return this.editMode() && !item.config.static && (item.config.isResizable ?? true);\r\n }\r\n\r\n // ---- Pointer-driven interaction (drag / resize) ----------------------------------\r\n\r\n begin(id: string): void {\r\n const target = this.items().find((x) => x.id === id);\r\n if (!target) return;\r\n\r\n this.startItems = this.items().map((x) => ({ ...x, config: { ...x.config } }));\r\n this.startConfig = { ...target.config };\r\n this.previewItems.set(null);\r\n this.activeId.set(id);\r\n this.applyCss();\r\n }\r\n\r\n move(id: string): void {\r\n const target = this.items().find((it) => it.id === id);\r\n if (!target?.element) return;\r\n const next = this.screenToGrid(target);\r\n this.preview(id, next);\r\n }\r\n\r\n resize(\r\n id: string,\r\n out: { width: number; height: number; moveLeft: number; moveTop: number },\r\n ): void {\r\n const target = this.items().find((x) => x.id === id);\r\n if (!target?.element) return;\r\n const next = this.screenResizeToGrid(target, out);\r\n this.preview(id, next);\r\n }\r\n\r\n end(id: string): void {\r\n if (this.activeId() !== id) return;\r\n\r\n const preview = this.previewItems();\r\n if (preview) {\r\n this.items.set(preview.map((x) => ({ ...x, config: { ...x.config } })));\r\n }\r\n const target = this.items().find((x) => x.id === id);\r\n if (target?.element) target.element.style.transform = '';\r\n\r\n this.previewItems.set(null);\r\n this.activeId.set(null);\r\n this.startConfig = null;\r\n this.startItems = null;\r\n\r\n // Final normalization/compaction happens only after the preview is committed.\r\n this.settle(id);\r\n this.applyCss();\r\n this.emit();\r\n }\r\n\r\n // ---- Keyboard-driven interaction (a11y) -------------------------------------------\r\n\r\n /** Moves an item by whole grid cells — used by arrow-key handling in the item component. */\r\n moveByCells(id: string, dCols: number, dRows: number): void {\r\n const target = this.items().find((x) => x.id === id);\r\n if (!target) return;\r\n this.begin(id);\r\n this.preview(id, { ...target.config, x: target.config.x + dCols, y: target.config.y + dRows });\r\n this.end(id);\r\n }\r\n\r\n /** Resizes an item by whole grid cells — used by shift+arrow handling in the item component. */\r\n resizeByCells(id: string, dCols: number, dRows: number): void {\r\n const target = this.items().find((x) => x.id === id);\r\n if (!target) return;\r\n this.begin(id);\r\n const w = this.clampSize(\r\n target.config.w + dCols,\r\n target.config.minW,\r\n target.config.maxW,\r\n this.columns(),\r\n );\r\n const h = this.clampSize(\r\n target.config.h + dRows,\r\n target.config.minH,\r\n target.config.maxH,\r\n Infinity,\r\n );\r\n this.preview(id, { ...target.config, w, h });\r\n this.end(id);\r\n }\r\n\r\n // ---- Internals ----------------------------------------------------------------------\r\n\r\n private preview(id: string, config: GridItemConfig): void {\r\n const base = this.startItems;\r\n if (!base) return;\r\n\r\n const clamped = this.clamp(config);\r\n const opt = this.options();\r\n\r\n // The placeholder is the moving item during preview. The real DOM element\r\n // remains under ngxDraggable's control and is never repositioned by the grid.\r\n let candidate: GridItemState[];\r\n\r\n if (!opt.allowOverlap && opt.swap && this.startConfig) {\r\n const swapped = trySwap(base, id, this.startConfig, clamped);\r\n candidate =\r\n swapped ??\r\n base.map((x) =>\r\n x.id === id ? { ...x, config: { ...clamped } } : { ...x, config: { ...x.config } },\r\n );\r\n } else {\r\n candidate = base.map((x) =>\r\n x.id === id ? { ...x, config: { ...clamped } } : { ...x, config: { ...x.config } },\r\n );\r\n }\r\n\r\n if (!opt.allowOverlap && opt.pushItems) {\r\n candidate = moveItem(candidate, id, clamped.x, clamped.y, {\r\n cols: this.columns(),\r\n compact: opt.compact === 'none' ? 'vertical' : opt.compact,\r\n allowOverlap: false,\r\n maxRows: opt.maxRows,\r\n });\r\n }\r\n if (!opt.allowOverlap && opt.compact !== 'none') {\r\n candidate = compact(candidate, opt.compact);\r\n }\r\n\r\n this.previewItems.set(candidate);\r\n this.applyCss();\r\n }\r\n\r\n private screenToGrid(item: GridItemState): GridItemConfig {\r\n const containerRect = this._element.getBoundingClientRect();\r\n const r = item.element!.getBoundingClientRect();\r\n const m = this.metrics();\r\n const rtl = this.rtl();\r\n const leftPx = r.left - containerRect.left;\r\n const topPx = r.top - containerRect.top;\r\n const nx = leftToCol(leftPx, item.config.w, m, rtl);\r\n const ny = topToRow(topPx, m);\r\n return this.clamp({ ...item.config, x: nx, y: ny });\r\n }\r\n\r\n private screenResizeToGrid(\r\n item: GridItemState,\r\n out: { width: number; height: number; moveLeft: number; moveTop: number },\r\n ): GridItemConfig {\r\n const m = this.metrics();\r\n const gap = m.gap;\r\n let w = Math.max(1, Math.round((out.width + gap) / (m.colWidth + gap)));\r\n let h = Math.max(1, Math.round((out.height + gap) / (m.rowHeight + gap)));\r\n let x = item.config.x;\r\n let y = item.config.y;\r\n // moveLeft/moveTop are physical (viewport) deltas from the resizable directive;\r\n // moving the item's *start* edge left/up in physical space means, in RTL, that\r\n // the logical column count grows from the *end* instead — handled by re-deriving\r\n // x from the resulting physical box rather than from moveLeft directly.\r\n if (this.rtl()) {\r\n // 'w' handle grows width to the right physically but that's the grid's logical end;\r\n // recompute x from the (possibly shifted) physical left edge captured via the element.\r\n const r = item.element!.getBoundingClientRect();\r\n const containerRect = this._element.getBoundingClientRect();\r\n const leftPx = r.left + out.moveLeft - containerRect.left;\r\n x = leftToCol(leftPx, w, m, true);\r\n } else {\r\n if (out.moveLeft) x += Math.round(out.moveLeft / (m.colWidth + gap));\r\n }\r\n if (out.moveTop) y += Math.round(out.moveTop / (m.rowHeight + gap));\r\n return this.clamp({ ...item.config, x, y, w, h });\r\n }\r\n\r\n private clamp(c: GridItemConfig): GridItemConfig {\r\n const cols = this.columns();\r\n const next = { ...c };\r\n next.w = this.clampSize(next.w, next.minW, next.maxW, cols);\r\n next.h = this.clampSize(next.h, next.minH, next.maxH, this.options().maxRows ?? Infinity);\r\n next.x = Math.max(0, Math.min(next.x, cols - next.w));\r\n next.y = Math.max(0, next.y);\r\n if (this.options().maxRows)\r\n next.y = Math.min(next.y, Math.max(0, this.options().maxRows! - next.h));\r\n return next;\r\n }\r\n\r\n private clampSize(\r\n size: number,\r\n min: number | undefined,\r\n max: number | undefined,\r\n hardMax: number,\r\n ): number {\r\n let v = Math.max(min ?? 1, size);\r\n if (max) v = Math.min(v, max);\r\n return Math.min(v, hardMax);\r\n }\r\n\r\n /** Applies pushes on drag-end and, when configured, removes gaps via compaction. */\r\n private settle(activeId?: string): void {\r\n const opt = this.options();\r\n const before = this.items();\r\n let arr = before.map((x) => ({ ...x, config: { ...x.config } }));\r\n if (!opt.allowOverlap) {\r\n if (activeId && opt.pushItems) {\r\n arr = moveItem(\r\n arr,\r\n activeId,\r\n arr.find((x) => x.id === activeId)!.config.x,\r\n arr.find((x) => x.id === activeId)!.config.y,\r\n {\r\n cols: this.columns(),\r\n compact: opt.compact === 'none' ? 'vertical' : opt.compact,\r\n allowOverlap: false,\r\n maxRows: opt.maxRows,\r\n },\r\n );\r\n }\r\n if (opt.compact !== 'none') arr = compact(arr, opt.compact);\r\n }\r\n // Compaction/push are deterministic pure functions: if they didn't change\r\n // anything, keep the previous array reference instead of writing an\r\n // equal-but-new one — that would otherwise ripple into every computed\r\n // derived from `items` (layout, height, per-item `interactive`, ...) for\r\n // no reason, and risks re-arming the same feedback loop described above.\r\n if (itemsEqual(before, arr)) return;\r\n this.items.set(arr);\r\n this.applyCss();\r\n }\r\n\r\n private applyCss(): void {\r\n if (!this._element) return;\r\n\r\n const source = this.previewItems() ?? this.items();\r\n const activeId = this.activeId();\r\n const m = this.metrics();\r\n const rtl = this.rtl();\r\n\r\n for (const item of source) {\r\n if (!item.element) continue;\r\n\r\n // While dragging/resizing, the real active element is moved by\r\n // ngxDraggable/ngxResizable. Never fight those directives by writing\r\n // left/top/width/height here.\r\n if (item.id === activeId) continue;\r\n\r\n const box = placeItem(item.config, m, rtl);\r\n const style = item.element.style;\r\n style.position = 'absolute';\r\n style.left = `${box.left}px`;\r\n style.top = `${box.top}px`;\r\n style.width = `${box.width}px`;\r\n style.height = `${box.height}px`;\r\n item.element.dataset['gridX'] = String(item.config.x);\r\n item.element.dataset['gridY'] = String(item.config.y);\r\n item.element.dataset['gridW'] = String(item.config.w);\r\n item.element.dataset['gridH'] = String(item.config.h);\r\n }\r\n\r\n const placeholderItem = activeId ? source.find((x) => x.id === activeId) : undefined;\r\n if (this.placeholder) {\r\n if (placeholderItem && activeId) {\r\n const box = placeItem(placeholderItem.config, m, rtl);\r\n const style = this.placeholder.style;\r\n style.display = 'block';\r\n style.left = `${box.left}px`;\r\n style.top = `${box.top}px`;\r\n style.width = `${box.width}px`;\r\n style.height = `${box.height}px`;\r\n this.placeholder.dataset['gridX'] = String(placeholderItem.config.x);\r\n this.placeholder.dataset['gridY'] = String(placeholderItem.config.y);\r\n this.placeholder.dataset['gridW'] = String(placeholderItem.config.w);\r\n this.placeholder.dataset['gridH'] = String(placeholderItem.config.h);\r\n } else {\r\n this.placeholder.style.display = 'none';\r\n }\r\n }\r\n }\r\n\r\n private metrics(): GridMetrics {\r\n const rect = this._element?.getBoundingClientRect() ?? ({ width: 0 } as DOMRect);\r\n return computeMetrics(rect.width, this.options());\r\n }\r\n\r\n private resolveRtl(): boolean {\r\n const opt = this.options().rtl;\r\n if (opt === true || opt === false) return opt;\r\n return this._element ? isRtl(this._element) : false;\r\n }\r\n\r\n private calculateHeight(items: readonly GridItemState[], o: GridLayoutOptions): number {\r\n const preview = this.previewItems();\r\n const source = preview ?? items;\r\n const rows = Math.max(1, maxOccupiedRow(source));\r\n const m = this._element\r\n ? this.metrics()\r\n : ({\r\n rowHeight: o.rowHeight === 'fit' ? 100 : o.rowHeight,\r\n gap: o.gap ?? 0,\r\n padding: o.padding ?? 0,\r\n } as GridMetrics);\r\n return m.padding * 2 + rows * m.rowHeight + Math.max(0, rows - 1) * m.gap;\r\n }\r\n\r\n private emit(): void {\r\n this.layoutListener?.(this.layout());\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n OnDestroy,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { GridLayoutService, GridItemState } from '../services/grid-layout.service';\r\nimport { GridLayoutOptions, IGridLayoutOptions } from '../options/options';\r\nimport { LayoutOutput } from '../options/layout-output';\r\n\r\n@Component({\r\n selector: 'ngx-grid-layout',\r\n standalone: true,\r\n template: `\r\n <div class=\"ngx-grid-layout__surface\" [class.edit-mode]=\"editMode()\">\r\n <div class=\"ngx-grid-layout__placeholder\"></div>\r\n <ng-content />\r\n </div>\r\n `,\r\n host: {\r\n '[class.ngx-grid-layout--dragging]': 'service.isInteracting()',\r\n '[class.ngx-grid-layout--view]': '!editMode()',\r\n '[style.height.px]': 'service.height()',\r\n '[attr.dir]': 'dirOverride() ?? null',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./grid-layout.component.scss'],\r\n})\r\nexport class NgxGridLayoutComponent implements AfterViewInit, OnDestroy {\r\n readonly options = input<IGridLayoutOptions>(new GridLayoutOptions());\r\n readonly editMode = input(true);\r\n readonly layoutChange = output<LayoutOutput[]>();\r\n /** Explicit direction override. Leave unset to inherit the page/host direction automatically. */\r\n readonly dir = input<'ltr' | 'rtl' | undefined>(undefined);\r\n readonly dirOverride = this.dir;\r\n\r\n readonly service = inject(GridLayoutService);\r\n private readonly el = inject(ElementRef<HTMLElement>);\r\n private surface?: HTMLElement;\r\n private resizeObserver?: ResizeObserver;\r\n\r\n constructor() {\r\n effect(() => {\r\n const opts = { ...this.options() };\r\n if (this.dir()) opts.rtl = this.dir() === 'rtl';\r\n this.service.setOptions(opts);\r\n this.service.setEditMode(this.editMode());\r\n });\r\n\r\n this.service.connect((layout) => this.layoutChange.emit(layout));\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.surface = this.el.nativeElement.querySelector('.ngx-grid-layout__surface') as HTMLElement;\r\n this.service.attachElement(this.surface);\r\n this.setCss();\r\n\r\n this.resizeObserver = new ResizeObserver(() => {\r\n this.service.refreshMetrics();\r\n this.setCss();\r\n });\r\n this.resizeObserver.observe(this.surface);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.resizeObserver?.disconnect();\r\n }\r\n\r\n setItems(items: GridItemState[]): void {\r\n this.service.setItems(items);\r\n }\r\n update(options: Partial<IGridLayoutOptions>): void {\r\n this.service.setOptions(options);\r\n this.setCss();\r\n }\r\n\r\n private setCss(): void {\r\n const el = this.el.nativeElement,\r\n o = this.service.options();\r\n el.style.setProperty('--grid-cols', String(o.cols));\r\n el.style.setProperty('--grid-gap', `${o.gap ?? 0}px`);\r\n el.style.setProperty('--grid-row', `${o.rowHeight === 'fit' ? 100 : o.rowHeight}px`);\r\n const b = o.gridBackgroundConfig;\r\n el.style.setProperty('--grid-gap-color', `${b.gapColor}`);\r\n el.style.setProperty('--grid-border-width', `${b?.borderWidth ?? 0}px`);\r\n el.style.setProperty('--grid-border-color', b?.borderColor ?? 'transparent');\r\n el.style.setProperty('--grid-row-color', b?.rowColor ?? 'transparent');\r\n el.style.setProperty('--grid-col-color', b?.columnColor ?? 'transparent');\r\n el.style.setProperty(\r\n '--grid-bg-opacity',\r\n b?.show === 'never'\r\n ? '0'\r\n : b?.show === 'whenDragging'\r\n ? this.service.isInteracting()\r\n ? '1'\r\n : '0'\r\n : '1',\r\n );\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n type OnInit,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { GridLayoutService } from '../services/grid-layout.service';\r\nimport { GridItemConfig } from '../options/grid-item-config';\r\nimport { NgxDraggable, NgxResizable } from 'ngx-kit/drag-resize';\r\n\r\n@Component({\r\n selector: 'ngx-grid-item',\r\n standalone: true,\r\n hostDirectives: [\r\n { directive: NgxDraggable, inputs: ['dragHandle', 'lockAxis'], outputs: [] },\r\n NgxResizable,\r\n ],\r\n template: `\r\n <ng-content />\r\n `,\r\n host: {\r\n '[style.position]': '\"absolute\"',\r\n '[style.display]': '\"block\"',\r\n '[style.boxSizing]': '\"border-box\"',\r\n '[style.transition]': 'transitionStyle()',\r\n '[class.ngx-grid-item--dragging]': 'dragging()',\r\n '[class.ngx-grid-item--resizing]': 'resizing()',\r\n '[class.ngx-grid-item--static]': 'config().static',\r\n '[class.with-resize-handler]': 'resizable()',\r\n '[attr.tabindex]': 'interactive() ? 0 : null',\r\n '[attr.aria-grabbed]': 'dragging()',\r\n '[attr.data-grid-id]': 'itemId()',\r\n '(keydown)': 'onKeyDown($event)',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./grid-item.component.scss'],\r\n})\r\nexport class NgxGridItemComponent implements OnDestroy, OnInit {\r\n /** Bound as `[id]` in templates (matches the demo app's existing usage). */\r\n readonly itemId = input<string | undefined>(undefined, { alias: 'id' });\r\n readonly config = input<GridItemConfig>({ x: 0, y: 0, w: 1, h: 1 });\r\n readonly layoutChange = output<GridItemConfig>();\r\n\r\n readonly dragging = signal(false);\r\n readonly resizing = signal(false);\r\n readonly active = computed(() => this.dragging() || this.resizing());\r\n readonly transitionStyle = computed(() =>\r\n !this.active() && this.service.options().animate\r\n ? 'left .18s ease, top .18s ease, width .18s ease, height .18s ease'\r\n : 'none',\r\n );\r\n readonly interactive = computed(() => {\r\n const id = this.itemId();\r\n const item = id ? this.service.items().find((x) => x.id === id) : undefined;\r\n return !!item && (this.service.isItemDraggable(item) || this.service.isItemResizable(item));\r\n });\r\n\r\n private readonly service = inject(GridLayoutService);\r\n private readonly el = inject(ElementRef<HTMLElement>);\r\n private readonly drag = inject(NgxDraggable);\r\n private readonly resize = inject(NgxResizable);\r\n\r\n readonly resizable = computed(() => {\r\n return !this.resize.disabled && this.service.editMode();\r\n });\r\n constructor() {\r\n // `takeUntilDestroyed()` releases these subscriptions on destroy — the\r\n // event for every grid item ever created (real damage in layouts where\r\n // items are added/removed dynamically, e.g. via *ngFor + trackBy).\r\n this.drag.dragStart.pipe(takeUntilDestroyed()).subscribe(() => this.onDragStart());\r\n this.drag.dragMove.pipe(takeUntilDestroyed()).subscribe(() => this.onDragMove());\r\n this.drag.dragEnd.pipe(takeUntilDestroyed()).subscribe(() => this.onDragEnd());\r\n this.resize.resizeStart.pipe(takeUntilDestroyed()).subscribe(() => this.onResizeStart());\r\n this.resize.resizeMove.pipe(takeUntilDestroyed()).subscribe((v) => this.onResizeMove(v));\r\n this.resize.resizeEnd.pipe(takeUntilDestroyed()).subscribe(() => this.onResizeEnd());\r\n\r\n // Keep the hosted directives in sync with per-item state: static items and\r\n // items explicitly marked non-draggable/non-resizable stop reacting entirely.\r\n effect(() => {\r\n const id = this.itemId();\r\n const item = id ? this.service.items().find((x) => x.id === id) : undefined;\r\n this.drag.disabled = !item || !this.service.isItemDraggable(item);\r\n this.resize.disabled = !item || !this.service.isItemResizable(item);\r\n if (item) this.applySizeConstraints(item.config);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const id = this.itemId();\r\n if (!id) return;\r\n this.service.registerItem({\r\n id,\r\n config: this.config(),\r\n element: this.el.nativeElement,\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n const id = this.itemId();\r\n if (id) this.service.unregisterItem(id);\r\n }\r\n\r\n onDragStart = (): void => {\r\n this.dragging.set(true);\r\n const id = this.itemId();\r\n if (id) this.service.begin(id);\r\n };\r\n onDragMove = (): void => {\r\n const id = this.itemId();\r\n if (id) this.service.move(id);\r\n };\r\n onDragEnd = (): void => {\r\n this.dragging.set(false);\r\n this.finishInteraction();\r\n };\r\n onResizeStart = (): void => {\r\n this.resizing.set(true);\r\n const id = this.itemId();\r\n if (id) this.service.begin(id);\r\n };\r\n onResizeMove = (v: {\r\n width: number;\r\n height: number;\r\n moveLeft: number;\r\n moveTop: number;\r\n }): void => {\r\n const id = this.itemId();\r\n if (id) this.service.resize(id, v);\r\n };\r\n onResizeEnd = (): void => {\r\n this.resizing.set(false);\r\n this.finishInteraction();\r\n };\r\n\r\n /** Arrow keys move the item by one cell; Shift+arrow resizes it by one cell. */\r\n onKeyDown(e: KeyboardEvent): void {\r\n const id = this.itemId();\r\n if (!id || !this.interactive()) return;\r\n const item = this.service.items().find((x) => x.id === id);\r\n if (!item) return;\r\n const deltas: Record<string, [number, number]> = {\r\n ArrowLeft: [-1, 0],\r\n ArrowRight: [1, 0],\r\n ArrowUp: [0, -1],\r\n ArrowDown: [0, 1],\r\n };\r\n const delta = deltas[e.key];\r\n if (!delta) return;\r\n e.preventDefault();\r\n if (e.shiftKey && this.service.isItemResizable(item)) {\r\n this.service.resizeByCells(id, delta[0], delta[1]);\r\n } else if (this.service.isItemDraggable(item)) {\r\n this.service.moveByCells(id, delta[0], delta[1]);\r\n }\r\n this.layoutChange.emit(this.service.items().find((x) => x.id === id)?.config ?? this.config());\r\n }\r\n\r\n private finishInteraction(): void {\r\n const id = this.itemId();\r\n if (!id) return;\r\n this.service.end(id);\r\n this.layoutChange.emit(this.service.items().find((x) => x.id === id)?.config ?? this.config());\r\n }\r\n\r\n /** Converts the item's min/max cell counts (config) into px for the resize directive. */\r\n private applySizeConstraints(config: GridItemConfig): void {\r\n const cellPx = this.el.nativeElement.getBoundingClientRect();\r\n const cols = Math.max(1, config.w);\r\n const rows = Math.max(1, config.h);\r\n const colPx = cellPx.width / cols || 1;\r\n const rowPx = cellPx.height / rows || 1;\r\n this.resize.minWidth = (config.minW ?? 1) * colPx;\r\n this.resize.minHeight = (config.minH ?? 1) * rowPx;\r\n this.resize.maxWidth = config.maxW ? config.maxW * colPx : Infinity;\r\n this.resize.maxHeight = config.maxH ? config.maxH * rowPx : Infinity;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { NgxGridLayoutComponent } from './grid-layout/grid-layout.component';\r\nimport { NgxGridItemComponent } from './grid-item/grid-item.component';\r\nimport { GridLayoutService } from './services/grid-layout.service';\r\n\r\n@NgModule({\r\n imports: [NgxGridLayoutComponent, NgxGridItemComponent],\r\n exports: [NgxGridLayoutComponent, NgxGridItemComponent],\r\n providers: [GridLayoutService],\r\n})\r\nexport class NgxGridLayoutModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-kit-grid-layout.mjs","sources":["../../../projects/libs/grid-layout/options/options.ts","../../../projects/libs/grid-layout/options/grid-item-config.ts","../../../projects/libs/grid-layout/utils/collision.ts","../../../projects/libs/grid-layout/utils/compaction.ts","../../../projects/libs/grid-layout/utils/geometry.ts","../../../projects/libs/grid-layout/services/grid-layout.service.ts","../../../projects/libs/grid-layout/grid-layout/grid-layout.component.ts","../../../projects/libs/grid-layout/grid-item/grid-item.component.ts","../../../projects/libs/grid-layout/ngx-grid-layout.module.ts","../../../projects/libs/grid-layout/ngx-kit-grid-layout.ts"],"sourcesContent":["export type GridFlow = 'free' | 'horizontal' | 'vertical';\r\nexport type CompactMode = 'none' | 'vertical' | 'horizontal' | 'both';\r\n\r\nexport interface IGridBackgroundCfg {\r\n show?: 'never' | 'always' | 'whenDragging';\r\n borderColor?: string;\r\n gapColor?: string;\r\n rowColor?: string;\r\n columnColor?: string;\r\n borderWidth?: number;\r\n}\r\n\r\nexport interface IGridLayoutOptions {\r\n cols: number;\r\n rowHeight: number | 'fit';\r\n gap?: number;\r\n padding?: number;\r\n flow?: GridFlow;\r\n compact?: CompactMode;\r\n allowOverlap?: boolean;\r\n pushItems?: boolean;\r\n /** When two items would swap places, prefer swapping over cascading a push. */\r\n swap?: boolean;\r\n dragThreshold?: number;\r\n animate?: boolean;\r\n /**\r\n * `true` / `false` force a direction; `'auto'` (default) reads the host element's\r\n * computed `direction`, so the grid follows the surrounding page automatically.\r\n */\r\n rtl?: boolean | 'auto';\r\n /** Caps the number of rows the grid can grow to. `undefined` = unbounded. */\r\n maxRows?: number;\r\n gridBackgroundConfig?: IGridBackgroundCfg;\r\n}\r\n\r\nexport class GridLayoutOptions implements IGridLayoutOptions {\r\n cols = 12;\r\n rowHeight: number | 'fit' = 50;\r\n gap = 8;\r\n padding = 0;\r\n flow = 'free' as GridFlow;\r\n compact = 'vertical' as CompactMode;\r\n allowOverlap = false;\r\n pushItems = true;\r\n swap = false;\r\n dragThreshold = 3;\r\n animate = true;\r\n rtl = 'auto' as boolean | 'auto';\r\n maxRows?: number;\r\n gridBackgroundConfig: IGridBackgroundCfg = {\r\n show: 'always' as const,\r\n borderColor: 'rgba(128,128,128,.16)',\r\n gapColor: 'transparent',\r\n rowColor: 'rgba(128,128,128,.07)',\r\n columnColor: 'rgba(128,128,128,.07)',\r\n borderWidth: 1,\r\n };\r\n}\r\n","export class GridItemConfig {\r\n x: number;\r\n y: number;\r\n w: number;\r\n h: number;\r\n minW?: number;\r\n minH?: number;\r\n maxW?: number;\r\n maxH?: number;\r\n /** Item can't be dragged or resized, and never moves during compaction/push. */\r\n static?: boolean;\r\n /** Overrides the layout-level draggable/resizable flags for this item only. */\r\n isDraggable?: boolean;\r\n isResizable?: boolean;\r\n\r\n constructor(x: number = 0, y: number = 0, w: number = 1, h: number = 1, s?: boolean) {\r\n this.x = x;\r\n this.y = y;\r\n this.w = w;\r\n this.h = h;\r\n this.static = s == true;\r\n }\r\n}\r\n\r\nexport const normalizeGridItem = (value?: Partial<GridItemConfig>): GridItemConfig => ({\r\n x: Math.max(0, Math.floor(value?.x ?? 0)),\r\n y: Math.max(0, Math.floor(value?.y ?? 0)),\r\n w: Math.max(1, Math.floor(value?.w ?? 1)),\r\n h: Math.max(1, Math.floor(value?.h ?? 1)),\r\n minW: value?.minW,\r\n minH: value?.minH,\r\n maxW: value?.maxW,\r\n maxH: value?.maxH,\r\n static: value?.static ?? false,\r\n isDraggable: value?.isDraggable,\r\n isResizable: value?.isResizable,\r\n});\r\n\r\n/**\r\n * Value equality for two (already-normalized) configs.\r\n *\r\n * This is what breaks the register -> settle -> new-object -> re-register\r\n * feedback loop: signals compare by *reference*, so anything that recomputes\r\n * a fresh config object on every change-detection pass (a `computed()` layout,\r\n * an inline object literal in a template, etc.) will always look \"changed\" to\r\n * an `effect()` even when nothing meaningful did. Callers must compare by\r\n * value before writing back to a signal, otherwise the write itself produces\r\n * a new reference that trips the same effect again — forever.\r\n */\r\nexport function gridItemConfigsEqual(a: GridItemConfig, b: GridItemConfig): boolean {\r\n return (\r\n a.x === b.x &&\r\n a.y === b.y &&\r\n a.w === b.w &&\r\n a.h === b.h &&\r\n (a.minW ?? null) === (b.minW ?? null) &&\r\n (a.minH ?? null) === (b.minH ?? null) &&\r\n (a.maxW ?? null) === (b.maxW ?? null) &&\r\n (a.maxH ?? null) === (b.maxH ?? null) &&\r\n !!a.static === !!b.static &&\r\n (a.isDraggable ?? null) === (b.isDraggable ?? null) &&\r\n (a.isResizable ?? null) === (b.isResizable ?? null)\r\n );\r\n}\r\n","import { GridItemConfig } from '../options/grid-item-config';\r\n\r\nexport interface LayoutNode {\r\n id: string;\r\n config: GridItemConfig;\r\n}\r\n\r\n/** Axis-aligned bounding-box overlap test in grid-cell space. */\r\nexport function collides(a: GridItemConfig, b: GridItemConfig): boolean {\r\n return a.x < b.x + b.w && a.x + a.w > b.x && a.y < b.y + b.h && a.y + a.h > b.y;\r\n}\r\n\r\n/** First item (other than `self`) whose cells overlap `config`, or null. */\r\nexport function getFirstCollision<T extends LayoutNode>(items: readonly T[], selfId: string, config: GridItemConfig): T | null {\r\n for (const item of items) {\r\n if (item.id === selfId) continue;\r\n if (collides(item.config, config)) return item;\r\n }\r\n return null;\r\n}\r\n\r\n/** All items whose cells overlap `config`, excluding `selfId`. */\r\nexport function getAllCollisions<T extends LayoutNode>(items: readonly T[], selfId: string, config: GridItemConfig): T[] {\r\n return items.filter((item) => item.id !== selfId && collides(item.config, config));\r\n}\r\n","import { GridItemConfig } from '../options/grid-item-config';\r\nimport type { CompactMode } from '../options/options';\r\nimport { LayoutNode, collides, getFirstCollision } from './collision';\r\n\r\nexport interface MoveOptions {\r\n cols: number;\r\n compact: CompactMode;\r\n allowOverlap: boolean;\r\n maxRows?: number;\r\n}\r\n\r\nfunction isStatic(node: LayoutNode): boolean {\r\n return !!node.config.static;\r\n}\r\n\r\nfunction clampToCols(config: GridItemConfig, cols: number): void {\r\n config.w = Math.min(Math.max(1, config.w), cols);\r\n config.x = Math.max(0, Math.min(config.x, cols - config.w));\r\n config.y = Math.max(0, config.y);\r\n}\r\n\r\nfunction clone<T extends LayoutNode>(items: readonly T[]): T[] {\r\n return items.map((i) => ({ ...i, config: { ...i.config } })) as T[];\r\n}\r\n\r\n/**\r\n * Moves `id` to grid cell (x, y) and, unless overlap is explicitly allowed,\r\n * cascades any resulting collisions by pushing the colliding items out of the\r\n * way (downward for vertical-flow grids, rightward for horizontal-flow ones).\r\n * Static items are treated as fixed obstacles: they block, but never move.\r\n * Pure function — returns a new array, never mutates its input.\r\n */\r\nexport function moveItem<T extends LayoutNode>(\r\n items: readonly T[],\r\n id: string,\r\n x: number,\r\n y: number,\r\n opts: MoveOptions,\r\n depth = 0,\r\n): T[] {\r\n let arr = clone(items);\r\n const item = arr.find((i) => i.id === id);\r\n if (!item || isStatic(item)) return arr;\r\n\r\n item.config.x = x;\r\n item.config.y = y;\r\n clampToCols(item.config, opts.cols);\r\n\r\n if (opts.allowOverlap || depth > arr.length + 24) return arr;\r\n\r\n const compareFn = compareForCompaction(opts.compact);\r\n let guard = 0;\r\n while (guard++ < arr.length + 24) {\r\n const mover = arr.find((i) => i.id === id)!;\r\n const staticBlocker = arr.find(\r\n (i) => i.id !== id && isStatic(i) && collides(mover.config, i.config),\r\n );\r\n if (staticBlocker) {\r\n if (opts.compact === 'horizontal') {\r\n mover.config.x = staticBlocker.config.x + staticBlocker.config.w;\r\n } else {\r\n mover.config.y = staticBlocker.config.y + staticBlocker.config.h;\r\n }\r\n clampToCols(mover.config, opts.cols);\r\n continue; // the new position may collide with something else — re-check from the top.\r\n }\r\n\r\n const blockers = arr\r\n .filter((i) => i.id !== id && !isStatic(i) && collides(mover.config, i.config))\r\n .sort(compareFn);\r\n if (blockers.length === 0) break;\r\n arr = pushAway(arr, mover, blockers[0], opts, depth + 1);\r\n }\r\n return arr;\r\n}\r\n\r\nfunction pushAway<T extends LayoutNode>(\r\n items: T[],\r\n mover: T,\r\n blocked: T,\r\n opts: MoveOptions,\r\n depth: number,\r\n): T[] {\r\n const targetX =\r\n opts.compact === 'horizontal' ? mover.config.x + mover.config.w : blocked.config.x;\r\n const targetY =\r\n opts.compact === 'horizontal' ? blocked.config.y : mover.config.y + mover.config.h;\r\n return moveItem(items, blocked.id, targetX, targetY, opts, depth);\r\n}\r\n\r\nfunction compareForCompaction(mode: CompactMode) {\r\n return (a: LayoutNode, b: LayoutNode) =>\r\n mode === 'horizontal'\r\n ? a.config.x - b.config.x || a.config.y - b.config.y\r\n : a.config.y - b.config.y || a.config.x - b.config.x;\r\n}\r\n\r\n/**\r\n * When the actively-moved item directly overlaps exactly one same-size item,\r\n * exchanging their positions reads much better than a cascading push. The\r\n * caller (service) decides when to offer this vs. falling back to `moveItem`.\r\n */\r\nexport function trySwap<T extends LayoutNode>(\r\n items: readonly T[],\r\n id: string,\r\n previous: GridItemConfig,\r\n next: GridItemConfig,\r\n): T[] | null {\r\n if (items.some((i) => i.id !== id && isStatic(i) && collides(i.config, next))) return null;\r\n const collisions = items.filter((i) => i.id !== id && !isStatic(i) && collides(i.config, next));\r\n if (collisions.length !== 1) return null;\r\n const [target] = collisions;\r\n if (target.config.w !== next.w || target.config.h !== next.h) return null;\r\n const arr = clone(items);\r\n const mover = arr.find((i) => i.id === id)!;\r\n const other = arr.find((i) => i.id === target.id)!;\r\n mover.config.x = next.x;\r\n mover.config.y = next.y;\r\n other.config.x = previous.x;\r\n other.config.y = previous.y;\r\n return arr;\r\n}\r\n\r\n/**\r\n * Removes gaps by pulling every non-static item as far toward the start of the\r\n * grid as it can go without overlapping another item, in reading order.\r\n */\r\nexport function compact<T extends LayoutNode>(items: readonly T[], mode: CompactMode): T[] {\r\n const arr = clone(items);\r\n if (mode === 'none') return arr;\r\n const canX = mode === 'horizontal' || mode === 'both';\r\n const canY = mode === 'vertical' || mode === 'both';\r\n const sorted = [...arr].sort((a, b) => a.config.y - b.config.y || a.config.x - b.config.x);\r\n for (const item of sorted) {\r\n if (isStatic(item)) continue;\r\n if (canY) {\r\n let y = item.config.y;\r\n while (y > 0 && !getFirstCollision(arr, item.id, { ...item.config, y: y - 1 })) y--;\r\n item.config.y = y;\r\n }\r\n if (canX) {\r\n let x = item.config.x;\r\n while (x > 0 && !getFirstCollision(arr, item.id, { ...item.config, x: x - 1 })) x--;\r\n item.config.x = x;\r\n }\r\n }\r\n return arr;\r\n}\r\n\r\n/** Highest occupied row (0-based, exclusive) across all items — drives the grid's auto-height. */\r\nexport function maxOccupiedRow(items: readonly LayoutNode[]): number {\r\n return items.reduce((max, i) => Math.max(max, i.config.y + i.config.h), 0);\r\n}\r\n\r\n/**\r\n * Finds a cell for `config` that doesn't collide with any existing item.\r\n * Tries the requested (x, y) first; if that's already occupied, scans\r\n * forward in reading order (row by row, top to bottom, left to right — the\r\n * caller is responsible for any RTL flipping when it turns this back into\r\n * pixels) for the first gap large enough to fit it.\r\n *\r\n * This is what a newly-registered item (or one whose config changes to a\r\n * position that's no longer free) should go through instead of silently\r\n * overlapping whatever's already there: unlike a drag/resize, registering an\r\n * item isn't a deliberate \"make room for me\" gesture, so relocating the new\r\n * item to open space reads far better than shoving already-placed items\r\n * around to accommodate it.\r\n */\r\nexport function findFreeSpot<T extends LayoutNode>(\r\n items: readonly T[],\r\n config: GridItemConfig,\r\n cols: number,\r\n excludeId?: string,\r\n): { x: number; y: number } {\r\n const others = excludeId ? items.filter((i) => i.id !== excludeId) : items;\r\n const fits = (x: number, y: number) => !others.some((i) => collides(i.config, { ...config, x, y }));\r\n\r\n const startX = Math.max(0, Math.min(config.x, cols - config.w));\r\n const startY = Math.max(0, config.y);\r\n if (fits(startX, startY)) return { x: startX, y: startY };\r\n\r\n // The row just past the current bottom is always fully empty, so this loop\r\n // is guaranteed to find a fit no later than `maxY`.\r\n const maxY = maxOccupiedRow(others) + 1;\r\n for (let y = 0; y <= maxY; y++) {\r\n for (let x = 0; x <= cols - config.w; x++) {\r\n if (fits(x, y)) return { x, y };\r\n }\r\n }\r\n return { x: startX, y: maxY + 1 };\r\n}\r\n","import { GridItemConfig } from '../options/grid-item-config';\r\nimport { IGridLayoutOptions } from '../options/options';\r\n\r\n/**\r\n * All pixel <-> grid-cell math lives here, in one RTL-aware place.\r\n *\r\n * Grid coordinates are always *logical* (reading-order): x = 0 is the first\r\n * column in the direction text flows — the left edge in LTR, the right edge\r\n * in RTL. Every physical (CSS `left`/pixel) calculation goes through here so\r\n * the rest of the codebase never has to think about direction again.\r\n */\r\nexport interface GridMetrics {\r\n /** Inner content width available for columns (container width minus padding). */\r\n contentWidth: number;\r\n colWidth: number;\r\n rowHeight: number;\r\n gap: number;\r\n padding: number;\r\n}\r\n\r\nexport function computeMetrics(containerWidth: number, options: IGridLayoutOptions): GridMetrics {\r\n const cols = Math.max(1, Math.floor(options.cols));\r\n const gap = options.gap ?? 0;\r\n const padding = options.padding ?? 0;\r\n const contentWidth = Math.max(0, containerWidth - padding * 2);\r\n const colWidth = Math.max(1, (contentWidth - gap * (cols - 1)) / cols);\r\n const rowHeight = options.rowHeight === 'fit' ? Math.max(1, colWidth) : Math.max(1, options.rowHeight);\r\n return { contentWidth, colWidth, rowHeight, gap, padding };\r\n}\r\n\r\n/** Physical CSS `left` (px, relative to the grid surface's content box) for a logical column. */\r\nexport function colToLeft(colIndex: number, spanCols: number, m: GridMetrics, rtl: boolean): number {\r\n if (!rtl) return m.padding + colIndex * (m.colWidth + m.gap);\r\n const widthPx = spanCols * m.colWidth + (spanCols - 1) * m.gap;\r\n const rightEdge = m.padding + colIndex * (m.colWidth + m.gap);\r\n return m.contentWidth + m.padding - rightEdge - widthPx;\r\n}\r\n\r\nexport function rowToTop(rowIndex: number, m: GridMetrics): number {\r\n return m.padding + rowIndex * (m.rowHeight + m.gap);\r\n}\r\n\r\nexport function spanToWidthPx(spanCols: number, m: GridMetrics): number {\r\n return spanCols * m.colWidth + Math.max(0, spanCols - 1) * m.gap;\r\n}\r\n\r\nexport function spanToHeightPx(spanRows: number, m: GridMetrics): number {\r\n return spanRows * m.rowHeight + Math.max(0, spanRows - 1) * m.gap;\r\n}\r\n\r\n/** Physical left px (as above) -> nearest logical column index. Inverse of `colToLeft`. */\r\nexport function leftToCol(leftPx: number, spanCols: number, m: GridMetrics, rtl: boolean): number {\r\n if (!rtl) return Math.round((leftPx - m.padding) / (m.colWidth + m.gap));\r\n const widthPx = spanCols * m.colWidth + (spanCols - 1) * m.gap;\r\n const rightEdge = m.contentWidth + m.padding - leftPx - widthPx;\r\n return Math.round((rightEdge - m.padding) / (m.colWidth + m.gap));\r\n}\r\n\r\nexport function topToRow(topPx: number, m: GridMetrics): number {\r\n return Math.round((topPx - m.padding) / (m.rowHeight + m.gap));\r\n}\r\n\r\n/** Places an item's pixel box (left/top/width/height) inside the grid surface, RTL-aware. */\r\nexport function placeItem(config: GridItemConfig, m: GridMetrics, rtl: boolean): { left: number; top: number; width: number; height: number } {\r\n return {\r\n left: colToLeft(config.x, config.w, m, rtl),\r\n top: rowToTop(config.y, m),\r\n width: spanToWidthPx(config.w, m),\r\n height: spanToHeightPx(config.h, m),\r\n };\r\n}\r\n","import { Injectable, computed, effect, signal } from '@angular/core';\r\nimport { GridLayoutOptions, IGridLayoutOptions } from '../options/options';\r\nimport {\r\n normalizeGridItem,\r\n gridItemConfigsEqual,\r\n GridItemConfig,\r\n} from '../options/grid-item-config';\r\nimport { LayoutOutput } from '../options/layout-output';\r\nimport { computeMetrics, leftToCol, placeItem, topToRow, GridMetrics } from '../utils/geometry';\r\nimport { compact, maxOccupiedRow, moveItem, trySwap, findFreeSpot } from '../utils/compaction';\r\nimport { isRtl } from 'ngx-kit/drag-resize';\r\n\r\nexport interface GridItemState {\r\n id: string;\r\n config: GridItemConfig;\r\n element?: HTMLElement;\r\n dragging?: boolean;\r\n resizing?: boolean;\r\n}\r\n\r\n/** Structural + value equality for two item-state arrays (order-independent). */\r\nfunction itemsEqual(a: readonly GridItemState[], b: readonly GridItemState[]): boolean {\r\n if (a.length !== b.length) return false;\r\n return a.every((itemA) => {\r\n const itemB = b.find((x) => x.id === itemA.id);\r\n return (\r\n !!itemB && itemA.element === itemB.element && gridItemConfigsEqual(itemA.config, itemB.config)\r\n );\r\n });\r\n}\r\n\r\n/** Value equality for two options objects — see `setOptions` for why this matters. */\r\nfunction optionsEqual(a: GridLayoutOptions, b: GridLayoutOptions): boolean {\r\n const bg1 = a.gridBackgroundConfig ?? {};\r\n const bg2 = b.gridBackgroundConfig ?? {};\r\n return (\r\n a.cols === b.cols &&\r\n a.rowHeight === b.rowHeight &&\r\n a.gap === b.gap &&\r\n a.padding === b.padding &&\r\n a.flow === b.flow &&\r\n a.compact === b.compact &&\r\n a.allowOverlap === b.allowOverlap &&\r\n a.pushItems === b.pushItems &&\r\n a.swap === b.swap &&\r\n a.dragThreshold === b.dragThreshold &&\r\n a.animate === b.animate &&\r\n a.rtl === b.rtl &&\r\n (a.maxRows ?? null) === (b.maxRows ?? null) &&\r\n bg1.show === bg2.show &&\r\n bg1.borderColor === bg2.borderColor &&\r\n bg1.gapColor === bg2.gapColor &&\r\n bg1.rowColor === bg2.rowColor &&\r\n bg1.columnColor === bg2.columnColor &&\r\n bg1.borderWidth === bg2.borderWidth\r\n );\r\n}\r\n\r\n@Injectable()\r\nexport class GridLayoutService {\r\n readonly options = signal<GridLayoutOptions>(new GridLayoutOptions());\r\n readonly items = signal<readonly GridItemState[]>([]);\r\n readonly editMode = signal(true);\r\n readonly activeId = signal<string | null>(null);\r\n readonly isInteracting = computed(() => this.activeId() !== null);\r\n readonly height = computed(() => this.calculateHeight(this.items(), this.options()));\r\n readonly layout = computed<LayoutOutput[]>(() =>\r\n this.items().map((x) => ({ id: x.id, ...x.config })),\r\n );\r\n readonly columns = computed(() => Math.max(1, Math.floor(this.options().cols)));\r\n\r\n readonly rtl = computed(() => {\r\n this.rtlTick();\r\n return this.resolveRtl();\r\n });\r\n private rtlTick = signal(0);\r\n\r\n private layoutListener?: (layout: LayoutOutput[]) => void;\r\n private startConfig: GridItemConfig | null = null;\r\n private startItems: readonly GridItemState[] | null = null;\r\n private previewItems = signal<readonly GridItemState[] | null>(null);\r\n private _element!: HTMLElement;\r\n private placeholder?: HTMLElement;\r\n\r\n constructor() {\r\n effect(() => {\r\n // Re-run whenever options or items change so CSS positions always reflect state.\r\n this.options();\r\n this.items();\r\n this.previewItems();\r\n this.rtlTick();\r\n if (this._element) this.applyCss();\r\n });\r\n }\r\n\r\n connect(onLayout: (layout: LayoutOutput[]) => void): void {\r\n this.layoutListener = onLayout;\r\n }\r\n setOptions(value: Partial<IGridLayoutOptions>): void {\r\n const next = Object.assign(new GridLayoutOptions(), this.options(), value);\r\n if (optionsEqual(this.options(), next)) return;\r\n this.options.set(next);\r\n }\r\n setEditMode(value: boolean): void {\r\n this.editMode.set(value);\r\n }\r\n setItems(items: GridItemState[]): void {\r\n this.items.set(items.map((x) => ({ ...x, config: normalizeGridItem(x.config) })));\r\n this.settle();\r\n this.emit();\r\n }\r\n\r\n registerItem(item: GridItemState): void {\r\n const existing = this.items().find((x) => x.id === item.id);\r\n if (!existing) {\r\n const normalized = normalizeGridItem(item.config);\r\n const placed = this.options().allowOverlap\r\n ? normalized\r\n : { ...normalized, ...findFreeSpot(this.items(), normalized, this.columns()) };\r\n this.items.update((xs) => [...xs, { ...item, config: placed }]);\r\n this.settle();\r\n return;\r\n }\r\n if (existing.element === item.element) return;\r\n this.items.update((xs) =>\r\n xs.map((x) => (x.id === item.id ? { ...x, element: item.element } : x)),\r\n );\r\n }\r\n\r\n updateItemConfig(id: string, config: GridItemConfig): void {\r\n const existing = this.items().find((x) => x.id === id);\r\n if (!existing) return;\r\n const normalized = normalizeGridItem(config);\r\n const placed = this.options().allowOverlap\r\n ? normalized\r\n : { ...normalized, ...findFreeSpot(this.items(), normalized, this.columns(), id) };\r\n if (gridItemConfigsEqual(existing.config, placed)) return;\r\n this.items.update((xs) => xs.map((x) => (x.id === id ? { ...x, config: placed } : x)));\r\n this.settle();\r\n }\r\n unregisterItem(id: string): void {\r\n this.items.update((xs) => xs.filter((x) => x.id !== id));\r\n this.settle();\r\n this.emit();\r\n }\r\n\r\n /** Called once the grid surface element exists (e.g. from `ngAfterViewInit`). */\r\n attachElement(el: HTMLElement): void {\r\n this._element = el;\r\n this.placeholder =\r\n (el.querySelector('.ngx-grid-layout__placeholder') as HTMLElement | null) ?? undefined;\r\n if (this.placeholder) {\r\n this.placeholder.style.position = 'absolute';\r\n this.placeholder.style.display = 'none';\r\n this.placeholder.style.pointerEvents = 'none';\r\n this.placeholder.setAttribute('aria-hidden', 'true');\r\n }\r\n // `rtl` reads `this._element` directly (it isn't a signal), so bump a tick\r\n // signal to force the `rtl` computed to re-evaluate now that the element,\r\n // and therefore its computed `direction`, is known.\r\n this.rtlTick.update((n) => n + 1);\r\n this.applyCss();\r\n }\r\n\r\n /** Recomputes pixel positions after the surface resizes. Call from a `ResizeObserver`. */\r\n refreshMetrics(): void {\r\n this.applyCss();\r\n }\r\n\r\n isItemDraggable(item: GridItemState): boolean {\r\n return this.editMode() && !item.config.static && (item.config.isDraggable ?? true);\r\n }\r\n isItemResizable(item: GridItemState): boolean {\r\n return this.editMode() && !item.config.static && (item.config.isResizable ?? true);\r\n }\r\n\r\n // ---- Pointer-driven interaction (drag / resize) ----------------------------------\r\n\r\n begin(id: string): void {\r\n const target = this.items().find((x) => x.id === id);\r\n if (!target) return;\r\n\r\n this.startItems = this.items().map((x) => ({ ...x, config: { ...x.config } }));\r\n this.startConfig = { ...target.config };\r\n this.previewItems.set(null);\r\n this.activeId.set(id);\r\n this.applyCss();\r\n }\r\n\r\n move(id: string): void {\r\n const target = this.items().find((it) => it.id === id);\r\n if (!target?.element) return;\r\n const next = this.screenToGrid(target);\r\n this.preview(id, next);\r\n }\r\n\r\n resize(\r\n id: string,\r\n out: { width: number; height: number; moveLeft: number; moveTop: number },\r\n ): void {\r\n const target = this.items().find((x) => x.id === id);\r\n if (!target?.element) return;\r\n const next = this.screenResizeToGrid(target, out);\r\n this.preview(id, next);\r\n }\r\n\r\n end(id: string): void {\r\n if (this.activeId() !== id) return;\r\n\r\n const preview = this.previewItems();\r\n if (preview) {\r\n this.items.set(preview.map((x) => ({ ...x, config: { ...x.config } })));\r\n }\r\n const target = this.items().find((x) => x.id === id);\r\n if (target?.element) target.element.style.transform = '';\r\n\r\n this.previewItems.set(null);\r\n this.activeId.set(null);\r\n this.startConfig = null;\r\n this.startItems = null;\r\n\r\n // Final normalization/compaction happens only after the preview is committed.\r\n this.settle(id);\r\n this.applyCss();\r\n this.emit();\r\n }\r\n\r\n // ---- Keyboard-driven interaction (a11y) -------------------------------------------\r\n\r\n /** Moves an item by whole grid cells — used by arrow-key handling in the item component. */\r\n moveByCells(id: string, dCols: number, dRows: number): void {\r\n const target = this.items().find((x) => x.id === id);\r\n if (!target) return;\r\n this.begin(id);\r\n this.preview(id, { ...target.config, x: target.config.x + dCols, y: target.config.y + dRows });\r\n this.end(id);\r\n }\r\n\r\n /** Resizes an item by whole grid cells — used by shift+arrow handling in the item component. */\r\n resizeByCells(id: string, dCols: number, dRows: number): void {\r\n const target = this.items().find((x) => x.id === id);\r\n if (!target) return;\r\n this.begin(id);\r\n const w = this.clampSize(\r\n target.config.w + dCols,\r\n target.config.minW,\r\n target.config.maxW,\r\n this.columns(),\r\n );\r\n const h = this.clampSize(\r\n target.config.h + dRows,\r\n target.config.minH,\r\n target.config.maxH,\r\n Infinity,\r\n );\r\n this.preview(id, { ...target.config, w, h });\r\n this.end(id);\r\n }\r\n\r\n // ---- Internals ----------------------------------------------------------------------\r\n\r\n private preview(id: string, config: GridItemConfig): void {\r\n const base = this.startItems;\r\n if (!base) return;\r\n\r\n const clamped = this.clamp(config);\r\n const opt = this.options();\r\n\r\n // The placeholder is the moving item during preview. The real DOM element\r\n // remains under ngxDraggable's control and is never repositioned by the grid.\r\n let candidate: GridItemState[];\r\n\r\n if (!opt.allowOverlap && opt.swap && this.startConfig) {\r\n const swapped = trySwap(base, id, this.startConfig, clamped);\r\n candidate =\r\n swapped ??\r\n base.map((x) =>\r\n x.id === id ? { ...x, config: { ...clamped } } : { ...x, config: { ...x.config } },\r\n );\r\n } else {\r\n candidate = base.map((x) =>\r\n x.id === id ? { ...x, config: { ...clamped } } : { ...x, config: { ...x.config } },\r\n );\r\n }\r\n\r\n if (!opt.allowOverlap && opt.pushItems) {\r\n candidate = moveItem(candidate, id, clamped.x, clamped.y, {\r\n cols: this.columns(),\r\n compact: opt.compact === 'none' ? 'vertical' : opt.compact,\r\n allowOverlap: false,\r\n maxRows: opt.maxRows,\r\n });\r\n }\r\n if (!opt.allowOverlap && opt.compact !== 'none') {\r\n candidate = compact(candidate, opt.compact);\r\n }\r\n\r\n this.previewItems.set(candidate);\r\n this.applyCss();\r\n }\r\n\r\n private screenToGrid(item: GridItemState): GridItemConfig {\r\n const containerRect = this._element.getBoundingClientRect();\r\n const r = item.element!.getBoundingClientRect();\r\n const m = this.metrics();\r\n const rtl = this.rtl();\r\n const leftPx = r.left - containerRect.left;\r\n const topPx = r.top - containerRect.top;\r\n const nx = leftToCol(leftPx, item.config.w, m, rtl);\r\n const ny = topToRow(topPx, m);\r\n return this.clamp({ ...item.config, x: nx, y: ny });\r\n }\r\n\r\n private screenResizeToGrid(\r\n item: GridItemState,\r\n out: { width: number; height: number; moveLeft: number; moveTop: number },\r\n ): GridItemConfig {\r\n const m = this.metrics();\r\n const gap = m.gap;\r\n let w = Math.max(1, Math.round((out.width + gap) / (m.colWidth + gap)));\r\n let h = Math.max(1, Math.round((out.height + gap) / (m.rowHeight + gap)));\r\n let x = item.config.x;\r\n let y = item.config.y;\r\n // moveLeft/moveTop are physical (viewport) deltas from the resizable directive;\r\n // moving the item's *start* edge left/up in physical space means, in RTL, that\r\n // the logical column count grows from the *end* instead — handled by re-deriving\r\n // x from the resulting physical box rather than from moveLeft directly.\r\n if (this.rtl()) {\r\n // 'w' handle grows width to the right physically but that's the grid's logical end;\r\n // recompute x from the (possibly shifted) physical left edge captured via the element.\r\n const r = item.element!.getBoundingClientRect();\r\n const containerRect = this._element.getBoundingClientRect();\r\n const leftPx = r.left + out.moveLeft - containerRect.left;\r\n x = leftToCol(leftPx, w, m, true);\r\n } else {\r\n //if (out.moveLeft) x += Math.round(out.moveLeft / (m.colWidth + gap));\r\n if (out.moveLeft) {\r\n const rightEdge = item.config.x + item.config.w;\r\n x = rightEdge - w;\r\n }\r\n }\r\n if (out.moveTop) y += Math.round(out.moveTop / (m.rowHeight + gap));\r\n return this.clamp({ ...item.config, x, y, w, h });\r\n }\r\n\r\n private clamp(c: GridItemConfig): GridItemConfig {\r\n const cols = this.columns();\r\n const next = { ...c };\r\n next.w = this.clampSize(next.w, next.minW, next.maxW, cols);\r\n next.h = this.clampSize(next.h, next.minH, next.maxH, this.options().maxRows ?? Infinity);\r\n next.x = Math.max(0, Math.min(next.x, cols - next.w));\r\n next.y = Math.max(0, next.y);\r\n if (this.options().maxRows)\r\n next.y = Math.min(next.y, Math.max(0, this.options().maxRows! - next.h));\r\n return next;\r\n }\r\n\r\n private clampSize(\r\n size: number,\r\n min: number | undefined,\r\n max: number | undefined,\r\n hardMax: number,\r\n ): number {\r\n let v = Math.max(min ?? 1, size);\r\n if (max) v = Math.min(v, max);\r\n return Math.min(v, hardMax);\r\n }\r\n\r\n /** Applies pushes on drag-end and, when configured, removes gaps via compaction. */\r\n private settle(activeId?: string): void {\r\n const opt = this.options();\r\n const before = this.items();\r\n let arr = before.map((x) => ({ ...x, config: { ...x.config } }));\r\n if (!opt.allowOverlap) {\r\n if (activeId && opt.pushItems) {\r\n arr = moveItem(\r\n arr,\r\n activeId,\r\n arr.find((x) => x.id === activeId)!.config.x,\r\n arr.find((x) => x.id === activeId)!.config.y,\r\n {\r\n cols: this.columns(),\r\n compact: opt.compact === 'none' ? 'vertical' : opt.compact,\r\n allowOverlap: false,\r\n maxRows: opt.maxRows,\r\n },\r\n );\r\n }\r\n if (opt.compact !== 'none') arr = compact(arr, opt.compact);\r\n }\r\n // Compaction/push are deterministic pure functions: if they didn't change\r\n // anything, keep the previous array reference instead of writing an\r\n // equal-but-new one — that would otherwise ripple into every computed\r\n // derived from `items` (layout, height, per-item `interactive`, ...) for\r\n // no reason, and risks re-arming the same feedback loop described above.\r\n if (itemsEqual(before, arr)) return;\r\n this.items.set(arr);\r\n this.applyCss();\r\n }\r\n\r\n private applyCss(): void {\r\n if (!this._element) return;\r\n\r\n const source = this.previewItems() ?? this.items();\r\n const activeId = this.activeId();\r\n const m = this.metrics();\r\n const rtl = this.rtl();\r\n\r\n for (const item of source) {\r\n if (!item.element) continue;\r\n\r\n // While dragging/resizing, the real active element is moved by\r\n // ngxDraggable/ngxResizable. Never fight those directives by writing\r\n // left/top/width/height here.\r\n if (item.id === activeId) continue;\r\n\r\n const box = placeItem(item.config, m, rtl);\r\n const style = item.element.style;\r\n style.position = 'absolute';\r\n style.left = `${box.left}px`;\r\n style.top = `${box.top}px`;\r\n style.width = `${box.width}px`;\r\n style.height = `${box.height}px`;\r\n item.element.dataset['gridX'] = String(item.config.x);\r\n item.element.dataset['gridY'] = String(item.config.y);\r\n item.element.dataset['gridW'] = String(item.config.w);\r\n item.element.dataset['gridH'] = String(item.config.h);\r\n }\r\n\r\n const placeholderItem = activeId ? source.find((x) => x.id === activeId) : undefined;\r\n if (this.placeholder) {\r\n if (placeholderItem && activeId) {\r\n const box = placeItem(placeholderItem.config, m, rtl);\r\n const style = this.placeholder.style;\r\n style.display = 'block';\r\n style.left = `${box.left}px`;\r\n style.top = `${box.top}px`;\r\n style.width = `${box.width}px`;\r\n style.height = `${box.height}px`;\r\n this.placeholder.dataset['gridX'] = String(placeholderItem.config.x);\r\n this.placeholder.dataset['gridY'] = String(placeholderItem.config.y);\r\n this.placeholder.dataset['gridW'] = String(placeholderItem.config.w);\r\n this.placeholder.dataset['gridH'] = String(placeholderItem.config.h);\r\n } else {\r\n this.placeholder.style.display = 'none';\r\n }\r\n }\r\n }\r\n\r\n private metrics(): GridMetrics {\r\n const rect = this._element?.getBoundingClientRect() ?? ({ width: 0 } as DOMRect);\r\n return computeMetrics(rect.width, this.options());\r\n }\r\n\r\n private resolveRtl(): boolean {\r\n const opt = this.options().rtl;\r\n if (opt === true || opt === false) return opt;\r\n return this._element ? isRtl(this._element) : false;\r\n }\r\n\r\n private calculateHeight(items: readonly GridItemState[], o: GridLayoutOptions): number {\r\n const preview = this.previewItems();\r\n const source = preview ?? items;\r\n const rows = Math.max(1, maxOccupiedRow(source));\r\n const m = this._element\r\n ? this.metrics()\r\n : ({\r\n rowHeight: o.rowHeight === 'fit' ? 100 : o.rowHeight,\r\n gap: o.gap ?? 0,\r\n padding: o.padding ?? 0,\r\n } as GridMetrics);\r\n return m.padding * 2 + rows * m.rowHeight + Math.max(0, rows - 1) * m.gap;\r\n }\r\n\r\n private emit(): void {\r\n this.layoutListener?.(this.layout());\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n OnDestroy,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { GridLayoutService, GridItemState } from '../services/grid-layout.service';\r\nimport { GridLayoutOptions, IGridLayoutOptions } from '../options/options';\r\nimport { LayoutOutput } from '../options/layout-output';\r\n\r\n@Component({\r\n selector: 'ngx-grid-layout',\r\n standalone: true,\r\n template: `\r\n <div class=\"ngx-grid-layout__surface\" [class.edit-mode]=\"editMode()\">\r\n <div class=\"ngx-grid-layout__placeholder\"></div>\r\n <ng-content />\r\n </div>\r\n `,\r\n host: {\r\n '[class.ngx-grid-layout--dragging]': 'service.isInteracting()',\r\n '[class.ngx-grid-layout--view]': '!editMode()',\r\n '[style.height.px]': 'service.height()',\r\n '[attr.dir]': 'dirOverride() ?? null',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./grid-layout.component.scss'],\r\n})\r\nexport class NgxGridLayoutComponent implements AfterViewInit, OnDestroy {\r\n readonly options = input<IGridLayoutOptions>(new GridLayoutOptions());\r\n readonly editMode = input(true);\r\n readonly layoutChange = output<LayoutOutput[]>();\r\n /** Explicit direction override. Leave unset to inherit the page/host direction automatically. */\r\n readonly dir = input<'ltr' | 'rtl' | undefined>(undefined);\r\n readonly dirOverride = this.dir;\r\n\r\n readonly service = inject(GridLayoutService);\r\n private readonly el = inject(ElementRef<HTMLElement>);\r\n private surface?: HTMLElement;\r\n private resizeObserver?: ResizeObserver;\r\n\r\n constructor() {\r\n effect(() => {\r\n const opts = { ...this.options() };\r\n if (this.dir()) opts.rtl = this.dir() === 'rtl';\r\n this.service.setOptions(opts);\r\n this.service.setEditMode(this.editMode());\r\n });\r\n\r\n this.service.connect((layout) => this.layoutChange.emit(layout));\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.surface = this.el.nativeElement.querySelector('.ngx-grid-layout__surface') as HTMLElement;\r\n this.service.attachElement(this.surface);\r\n this.setCss();\r\n\r\n this.resizeObserver = new ResizeObserver(() => {\r\n this.service.refreshMetrics();\r\n this.setCss();\r\n });\r\n this.resizeObserver.observe(this.surface);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.resizeObserver?.disconnect();\r\n }\r\n\r\n setItems(items: GridItemState[]): void {\r\n this.service.setItems(items);\r\n }\r\n update(options: Partial<IGridLayoutOptions>): void {\r\n this.service.setOptions(options);\r\n this.setCss();\r\n }\r\n\r\n private setCss(): void {\r\n const el = this.el.nativeElement,\r\n o = this.service.options();\r\n el.style.setProperty('--grid-cols', String(o.cols));\r\n el.style.setProperty('--grid-gap', `${o.gap ?? 0}px`);\r\n el.style.setProperty('--grid-row', `${o.rowHeight === 'fit' ? 100 : o.rowHeight}px`);\r\n const b = o.gridBackgroundConfig;\r\n el.style.setProperty('--grid-gap-color', `${b.gapColor}`);\r\n el.style.setProperty('--grid-border-width', `${b?.borderWidth ?? 0}px`);\r\n el.style.setProperty('--grid-border-color', b?.borderColor ?? 'transparent');\r\n el.style.setProperty('--grid-row-color', b?.rowColor ?? 'transparent');\r\n el.style.setProperty('--grid-col-color', b?.columnColor ?? 'transparent');\r\n el.style.setProperty(\r\n '--grid-bg-opacity',\r\n b?.show === 'never'\r\n ? '0'\r\n : b?.show === 'whenDragging'\r\n ? this.service.isInteracting()\r\n ? '1'\r\n : '0'\r\n : '1',\r\n );\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { GridLayoutService } from '../services/grid-layout.service';\r\nimport { GridItemConfig } from '../options/grid-item-config';\r\nimport { NgxDraggable, NgxResizable } from 'ngx-kit/drag-resize';\r\n\r\n@Component({\r\n selector: 'ngx-grid-item',\r\n standalone: true,\r\n hostDirectives: [\r\n { directive: NgxDraggable, inputs: ['dragHandle', 'lockAxis'], outputs: [] },\r\n NgxResizable,\r\n ],\r\n template: `\r\n <ng-content />\r\n `,\r\n host: {\r\n '[style.position]': '\"absolute\"',\r\n '[style.display]': '\"block\"',\r\n '[style.boxSizing]': '\"border-box\"',\r\n '[style.transition]': 'transitionStyle()',\r\n '[class.ngx-grid-item--dragging]': 'dragging()',\r\n '[class.ngx-grid-item--resizing]': 'resizing()',\r\n '[class.ngx-grid-item--static]': 'config().static',\r\n '[class.with-resize-handler]': 'resizable()',\r\n '[attr.tabindex]': 'interactive() ? 0 : null',\r\n '[attr.aria-grabbed]': 'dragging()',\r\n '[attr.data-grid-id]': 'itemId()',\r\n '(keydown)': 'onKeyDown($event)',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./grid-item.component.scss'],\r\n})\r\nexport class NgxGridItemComponent implements OnDestroy, OnInit {\r\n /** Bound as `[id]` in templates (matches the demo app's existing usage). */\r\n readonly itemId = input<string | undefined>(undefined, { alias: 'id' });\r\n readonly config = input<GridItemConfig>({ x: 0, y: 0, w: 1, h: 1 });\r\n readonly layoutChange = output<GridItemConfig>();\r\n\r\n readonly dragging = signal(false);\r\n readonly resizing = signal(false);\r\n readonly active = computed(() => this.dragging() || this.resizing());\r\n readonly transitionStyle = computed(() =>\r\n !this.active() && this.service.options().animate\r\n ? 'left .18s ease, top .18s ease, width .18s ease, height .18s ease'\r\n : 'none',\r\n );\r\n readonly interactive = computed(() => {\r\n const id = this.itemId();\r\n const item = id ? this.service.items().find((x) => x.id === id) : undefined;\r\n return !!item && (this.service.isItemDraggable(item) || this.service.isItemResizable(item));\r\n });\r\n\r\n private readonly service = inject(GridLayoutService);\r\n private readonly el = inject(ElementRef<HTMLElement>);\r\n private readonly drag = inject(NgxDraggable);\r\n private readonly resize = inject(NgxResizable);\r\n\r\n readonly resizable = computed(() => {\r\n return !this.resize.disabled() && this.service.editMode();\r\n });\r\n constructor() {\r\n // `takeUntilDestroyed()` releases these subscriptions on destroy — the\r\n // event for every grid item ever created (real damage in layouts where\r\n // items are added/removed dynamically, e.g. via *ngFor + trackBy).\r\n this.drag.dragStart.subscribe(() => this.onDragStart());\r\n this.drag.dragMove.subscribe(() => this.onDragMove());\r\n this.drag.dragEnd.subscribe(() => this.onDragEnd());\r\n this.resize.resizeStart.subscribe(() => this.onResizeStart());\r\n this.resize.resizeMove.subscribe((v) => this.onResizeMove(v));\r\n this.resize.resizeEnd.subscribe(() => this.onResizeEnd());\r\n\r\n // Keep the hosted directives in sync with per-item state: static items and\r\n // items explicitly marked non-draggable/non-resizable stop reacting entirely.\r\n effect(() => {\r\n const id = this.itemId();\r\n const item = id ? this.service.items().find((x) => x.id === id) : undefined;\r\n this.drag.disabled.set(!item || !this.service.isItemDraggable(item));\r\n this.resize.disabled.set(!item || !this.service.isItemResizable(item));\r\n if (item) this.applySizeConstraints(item.config);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const id = this.itemId();\r\n if (!id) return;\r\n this.service.registerItem({\r\n id,\r\n config: this.config(),\r\n element: this.el.nativeElement,\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n const id = this.itemId();\r\n if (id) this.service.unregisterItem(id);\r\n }\r\n\r\n onDragStart = (): void => {\r\n this.dragging.set(true);\r\n const id = this.itemId();\r\n if (id) this.service.begin(id);\r\n };\r\n onDragMove = (): void => {\r\n const id = this.itemId();\r\n if (id) this.service.move(id);\r\n };\r\n onDragEnd = (): void => {\r\n this.dragging.set(false);\r\n this.finishInteraction();\r\n };\r\n onResizeStart = (): void => {\r\n this.resizing.set(true);\r\n const id = this.itemId();\r\n if (id) this.service.begin(id);\r\n };\r\n onResizeMove = (v: {\r\n width: number;\r\n height: number;\r\n moveLeft: number;\r\n moveTop: number;\r\n }): void => {\r\n const id = this.itemId();\r\n if (id) this.service.resize(id, v);\r\n };\r\n onResizeEnd = (): void => {\r\n this.resizing.set(false);\r\n this.finishInteraction();\r\n };\r\n\r\n /** Arrow keys move the item by one cell; Shift+arrow resizes it by one cell. */\r\n onKeyDown(e: KeyboardEvent): void {\r\n const id = this.itemId();\r\n if (!id || !this.interactive()) return;\r\n const item = this.service.items().find((x) => x.id === id);\r\n if (!item) return;\r\n const deltas: Record<string, [number, number]> = {\r\n ArrowLeft: [-1, 0],\r\n ArrowRight: [1, 0],\r\n ArrowUp: [0, -1],\r\n ArrowDown: [0, 1],\r\n };\r\n const delta = deltas[e.key];\r\n if (!delta) return;\r\n e.preventDefault();\r\n if (e.shiftKey && this.service.isItemResizable(item)) {\r\n this.service.resizeByCells(id, delta[0], delta[1]);\r\n } else if (this.service.isItemDraggable(item)) {\r\n this.service.moveByCells(id, delta[0], delta[1]);\r\n }\r\n this.layoutChange.emit(this.service.items().find((x) => x.id === id)?.config ?? this.config());\r\n }\r\n\r\n private finishInteraction(): void {\r\n const id = this.itemId();\r\n if (!id) return;\r\n this.service.end(id);\r\n this.layoutChange.emit(this.service.items().find((x) => x.id === id)?.config ?? this.config());\r\n }\r\n\r\n /** Converts the item's min/max cell counts (config) into px for the resize directive. */\r\n private applySizeConstraints(config: GridItemConfig): void {\r\n const cellPx = this.el.nativeElement.getBoundingClientRect();\r\n const cols = Math.max(1, config.w);\r\n const rows = Math.max(1, config.h);\r\n const colPx = cellPx.width / cols || 1;\r\n const rowPx = cellPx.height / rows || 1;\r\n this.resize.minWidth.set((config.minW ?? 1) * colPx);\r\n this.resize.minHeight.set((config.minH ?? 1) * rowPx);\r\n this.resize.maxWidth.set(config.maxW ? config.maxW * colPx : Infinity);\r\n this.resize.maxHeight.set(config.maxH ? config.maxH * rowPx : Infinity);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { NgxGridLayoutComponent } from './grid-layout/grid-layout.component';\r\nimport { NgxGridItemComponent } from './grid-item/grid-item.component';\r\nimport { GridLayoutService } from './services/grid-layout.service';\r\n\r\n@NgModule({\r\n imports: [NgxGridLayoutComponent, NgxGridItemComponent],\r\n exports: [NgxGridLayoutComponent, NgxGridItemComponent],\r\n providers: [GridLayoutService],\r\n})\r\nexport class NgxGridLayoutModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -69,7 +69,7 @@ class NgxMessageComponent {
|
|
|
69
69
|
icon;
|
|
70
70
|
showIcon = signal(true, /* @ts-ignore */
|
|
71
71
|
...(ngDevMode ? [{ debugName: "showIcon" }] : /* istanbul ignore next */ []));
|
|
72
|
-
options;
|
|
72
|
+
options = NGX_MESSAGE_DEFAULT_OPTIONS;
|
|
73
73
|
confetti = viewChild('confetti', /* @ts-ignore */
|
|
74
74
|
...(ngDevMode ? [{ debugName: "confetti" }] : /* istanbul ignore next */ []));
|
|
75
75
|
index = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-kit-message.mjs","sources":["../../../projects/libs/message/models/tokens.ts","../../../projects/libs/message/models/message-result.ts","../../../projects/libs/message/models/icons.ts","../../../projects/libs/message/components/message.component.ts","../../../projects/libs/message/components/message.component.html","../../../projects/libs/message/services/apply-default.ts","../../../projects/libs/message/services/message.service.ts","../../../projects/libs/message/message-facade.ts","../../../projects/libs/message/message-provider.ts","../../../projects/libs/message/models/message-options.ts","../../../projects/libs/message/ngx-kit-message.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { IMessageOptions } from './message-options.interface';\nimport { NgxMessageService } from '../public-api';\nimport { MessageOptions } from './message-options';\n\nexport const NGX_MESSAGE_CONFIGS = new InjectionToken<IMessageOptions>('ngx-message-configs');\n\nexport const NGX_MESSAGE_API = new InjectionToken<NgxMessageService>('NgxMessageService');\nexport const NGX_MESSAGE_DEFAULT_OPTIONS: MessageOptions = {\n useOverlay: true,\n title: '',\n text: '',\n html: '',\n backdrop: true,\n icon: 'None',\n width: undefined,\n allowOutsideClick: true,\n allowEscapeKey: true,\n allowEnterKey: true,\n showConfirmButton: true,\n showDenyButton: false,\n showCancelButton: false,\n confirmButtonText: 'Ok',\n denyButtonText: 'No',\n cancelButtonText: 'Cancel',\n confirmButtonColor: '',\n denyButtonColor: '',\n cancelButtonColor: '',\n confirmButtonAriaLabel: '',\n denyButtonAriaLabel: '',\n cancelButtonAriaLabel: '',\n reverseButtons: false,\n showCloseButton: true,\n containerClass: '',\n};\n","import { EventEmitter } from '@angular/core';\n\nexport type MessageOutput<T = any> = {\n id: number;\n close: () => void;\n afterClose: EventEmitter<MessageResult>;\n};\nexport interface MessageResult<T = any> {\n readonly isConfirmed: boolean;\n readonly isDenied: boolean;\n readonly isDismissed: boolean;\n /**\n * @description ❌⚠️NOT Implemented!⚠️❌\n */\n readonly value?: T;\n readonly dismiss?: DismissReason;\n}\n\n/**\n * An enum of possible reasons that can explain an alert dismissal.\n */\nexport enum DismissReason {\n cancel,\n backdrop,\n close,\n /**\n * @description ❌⚠️NOT Implemented!⚠️❌\n */\n esc,\n /**\n * @description ❌⚠️NOT Implemented!⚠️❌\n */\n timer,\n}\n","// 'None' | 'success' | 'error' | 'warning' | 'info' | 'question' | 'loading';\nexport const ICONS: { [key: string]: string } = {\n None: '',\n success: `<svg viewBox=\"0 0 46 46\"><path class=\"draw\" d=\"M12 24 L20 32 L34 15\"/></svg>`,\n error: `<svg viewBox=\"0 0 46 46\"><path class=\"draw\" d=\"M14 14 L32 32\"/><path class=\"draw\" style=\"animation-delay:.55s\" d=\"M32 14 L14 32\"/></svg>`,\n warning: `<svg viewBox=\"0 0 46 46\"><path class=\"draw\" d=\"M23 10 L23 26\"/><circle class=\"dot-mark\" cx=\"23\" cy=\"34\" r=\"3.4\"/></svg>`,\n info: `<svg viewBox=\"0 0 46 46\"><circle class=\"dot-mark\" cx=\"23\" cy=\"12\" r=\"3.2\" style=\"animation-delay:.28s\"/><path class=\"draw\" style=\"animation-delay:.4s\" d=\"M23 20 L23 36\"/></svg>`,\n question: `<svg viewBox=\"0 0 320 512\"><path fill=\"currentColor\" d=\"M204.3 32.01H96c-52.94 0-96 43.06-96 96c0 17.67 14.31 31.1 32 31.1s32-14.32 32-31.1c0-17.64 14.34-32 32-32h108.3C232.8 96.01 256 119.2 256 147.8c0 19.72-10.97 37.47-30.5 47.33L127.8 252.4C117.1 258.2 112 268.7 112 280v40c0 17.67 14.31 31.99 32 31.99s32-14.32 32-31.99V298.3L256 251.3c39.47-19.75 64-59.42 64-103.5C320 83.95 268.1 32.01 204.3 32.01zM144 400c-22.09 0-40 17.91-40 40s17.91 39.1 40 39.1s40-17.9 40-39.1S166.1 400 144 400z\"/></svg>`,\n loading: `<div class=\"spinner-wrap\"><div class=\"spinner\"></div></div>`,\n};\n","import {\n AfterViewInit,\n Component,\n DOCUMENT,\n ElementRef,\n HostListener,\n inject,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { IMessageOptions } from '../models/message-options.interface';\nimport { Subject } from 'rxjs';\nimport { MessageResult, DismissReason } from '../models/message-result';\nimport { CommonModule } from '@angular/common';\nimport { NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS } from '../models/tokens';\nimport { ICONS } from '../models/icons';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { makeConfetti } from 'ngx-kit/shared';\nimport { NgxMessageService } from '../services/message.service';\n\n@Component({\n selector: 'ngx-message',\n templateUrl: 'message.component.html',\n styleUrls: ['./message.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule],\n providers: [\n {\n provide: NGX_MESSAGE_CONFIGS,\n useValue: NGX_MESSAGE_DEFAULT_OPTIONS,\n },\n ],\n})\nexport class NgxMessageComponent implements OnInit, AfterViewInit {\n icon?: SafeHtml;\n showIcon = signal(true);\n options!: IMessageOptions;\n confetti = viewChild<ElementRef<HTMLDivElement>>('confetti');\n index = 0;\n\n protected sanitizer = inject(DomSanitizer);\n protected doc = inject(DOCUMENT);\n private readonly messageService = inject(NgxMessageService);\n\n private readonly _onClose = new Subject<{ index: number; result: MessageResult<any> }>();\n public onClose = this._onClose.asObservable();\n\n ngOnInit(): void {\n this.showIcon.update((x) => (x = this.options.icon != 'None'));\n this.icon = this.sanitizer.bypassSecurityTrustHtml(ICONS[this.options.icon ?? 'None']);\n }\n\n ngAfterViewInit(): void {\n const confetti = this.confetti()?.nativeElement;\n if (this.options.icon == 'success' && confetti) {\n makeConfetti(this.doc, confetti);\n }\n }\n\n /**\n * وقتی چند تا پیام همزمان باز باشن، هرکدوم listener خودشو روی document\n * داشت — پس یه فشردن Escape/Enter، رویداد رو به *همهشون* همزمان میفرستاد،\n * نه فقط آخرین پیامی که باز شده (رفتار طبیعیِ یه استکِ مودال باید این باشه\n * که فقط بالاترین لایه به کیبورد واکنش نشون بده). این چک همون چیزیه که\n * OverlayService با getLastDialog() برای اورلیها انجام میده.\n */\n private isTopmost(): boolean {\n const ids = [...this.messageService.alerts.keys()];\n if (!ids.length) return true;\n return this.index === Math.max(...ids);\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n onScapeKey(event: Event) {\n if (this.options.allowEscapeKey && this.isTopmost()) {\n this.onCancel();\n }\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n onEnterKey(event: Event) {\n if (!this.isTopmost()) return;\n event.stopPropagation();\n event.preventDefault();\n if (this.options.allowEnterKey) {\n if (this.options.showConfirmButton) {\n this.onConfirm();\n } else if (this.options.showDenyButton) {\n this.onDeny();\n } else {\n this.onCancel();\n }\n }\n }\n\n onConfirm() {\n this._onClose.next({\n index: this.index,\n result: {\n isConfirmed: true,\n isDismissed: false,\n isDenied: false,\n dismiss: DismissReason.close,\n },\n });\n }\n onCancel() {\n this._onClose.next({\n index: this.index,\n result: {\n isConfirmed: false,\n isDismissed: true,\n isDenied: false,\n dismiss: DismissReason.cancel,\n },\n });\n }\n onDeny() {\n this._onClose.next({\n index: this.index,\n result: {\n isConfirmed: false,\n isDismissed: false,\n isDenied: true,\n dismiss: DismissReason.close,\n },\n });\n }\n close() {\n this.onCancel();\n }\n\n onOutSideClick() {\n if (this.options.allowOutsideClick) {\n this.onCancel();\n }\n }\n innerOnClick(ev: Event) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n}\n","<div\n class=\"ngx-msg-overlay show\"\n (click)=\"onOutSideClick()\"\n [ngClass]=\"options.containerClass\"\n [class.has-backdrop]=\"options.backdrop\"\n [attr.data-type]=\"options.icon\">\n <div class=\"ngx-msg-modal\" (click)=\"innerOnClick($event)\">\n <div class=\"confetti\" #confetti></div>\n @if (options.showCloseButton) {\n <button class=\"close-x\" (click)=\"close()\" aria-label=\"Close\">✕</button>\n }\n @if (showIcon()) {\n <div class=\"icon-stage\">\n <div class=\"icon-ring\"></div>\n <div class=\"icon-disc\" [innerHTML]=\"icon\"></div>\n </div>\n }\n <h2>{{ options.title }}</h2>\n <p class=\"desc\">\n {{ options.text }}\n <span [innerHTML]=\"options.html\"></span>\n </p>\n\n <div class=\"ngx-msg-actions\">\n @if (options.showCancelButton) {\n <button\n class=\"btn btn-ghost\"\n (click)=\"onCancel()\"\n [attr.aria-label]=\"options.cancelButtonAriaLabel\">\n {{ options.cancelButtonText }}\n </button>\n }\n @if (options.showDenyButton) {\n <button\n class=\"btn btn-ghost\"\n (click)=\"onDeny()\"\n [attr.aria-label]=\"options.denyButtonAriaLabel\">\n {{ options.denyButtonText }}\n </button>\n }\n @if (options.showConfirmButton) {\n <button\n class=\"btn btn-primary\"\n (click)=\"onConfirm()\"\n [attr.aria-label]=\"options.confirmButtonAriaLabel\">\n {{ options.confirmButtonText }}\n </button>\n }\n </div>\n </div>\n</div>\n","export function applyDefaultConfig(config: any, defaultConfig: any): any {\n var config = JSON.parse(JSON.stringify(config));\n for (let key in defaultConfig) {\n if (config[key] === undefined || config[key] === null || config[key] === '') {\n config[key] = defaultConfig[key];\n } else if (typeof config[key] === 'object') {\n config[key] = applyDefaultConfig(config[key], defaultConfig[key]);\n }\n }\n return config;\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EmbeddedViewRef,\n EnvironmentInjector,\n EventEmitter,\n Inject,\n Injectable,\n Injector,\n} from '@angular/core';\nimport { NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS } from '../models/tokens';\nimport { IMessageOptions } from '../models/message-options.interface';\nimport { MessageOutput, MessageResult } from '../models/message-result';\nimport { DOCUMENT } from '@angular/common';\nimport { NgxMessageComponent } from '../components/message.component';\nimport { applyDefaultConfig } from './apply-default';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgxMessageService {\n // قبلاً یه آرایهی معمولی بود (`ComponentRef[]`) و removeDialogComponentFromBody\n // فقط componentRef رو destroy میکرد ولی هیچوقت از آرایه حذفش نمیکرد — یعنی\n // این سرویس (که providedIn:'root' و singleton سراسریه) به ازای هر پیامی که\n // تا حالا تو کل عمر اپ نشون داده شده، یک رفرنس destroy-شده رو برای همیشه نگه\n // میداشت: یک نشتی حافظهی پیوسته. با Map<id, ComponentRef> جایگزین شد که\n // با delete واقعاً entry رو آزاد میکنه؛ کلید هم شناسهی پایدارِ پیام (insertedId)\n // هست، نه موقعیتِ آرایه (که با splice ممکن بود جابهجا و نامعتبر بشه).\n alerts = new Map<number, ComponentRef<NgxMessageComponent>>();\n insertedId = 0;\n constructor(\n private appRef: ApplicationRef,\n private injector: Injector,\n private envInjector: EnvironmentInjector,\n @Inject(DOCUMENT) private _doc: Document,\n ) {}\n\n public show<T = any>(c?: IMessageOptions): MessageOutput<T> {\n let d = applyDefaultConfig(\n this.injector.get(NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS),\n NGX_MESSAGE_DEFAULT_OPTIONS,\n );\n const config = applyDefaultConfig(c, d);\n\n const componentRef = createComponent(NgxMessageComponent, {\n environmentInjector: this.envInjector,\n });\n\n this.appRef.attachView(componentRef.hostView);\n const id = this.insertedId++;\n const payload: MessageOutput<T> = {\n close: () => componentRef.instance.close(),\n id,\n afterClose: new EventEmitter(),\n };\n this.appendDialogComponentToBody(componentRef, config);\n componentRef.instance.options = config;\n componentRef.instance.index = id;\n componentRef.instance.onClose.subscribe((result) => {\n this.removeDialogComponentFromBody(result.index);\n payload.afterClose.emit(result.result);\n });\n this.alerts.set(id, componentRef);\n\n return payload;\n }\n\n private removeDialogComponentFromBody(id: number): void {\n const ref = this.alerts.get(id);\n if (!ref) return;\n\n const domElem = (ref.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n\n // قبل از destroy باید hidePopover صدا بزنیم\n if (domElem.popover === 'manual') {\n try {\n domElem.hidePopover();\n } catch {}\n }\n\n this.appRef.detachView(ref.hostView);\n ref.destroy();\n this.alerts.delete(id);\n }\n\n private appendDialogComponentToBody(\n componentRef: ComponentRef<NgxMessageComponent>,\n config: IMessageOptions,\n ) {\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n if (config.containerClass) {\n for (let c of config.containerClass.split(' ')) {\n if (c.trim()) domElem.classList.add(c);\n }\n }\n this._doc.body.appendChild(domElem);\n if (config.useOverlay) {\n domElem.popover = 'manual';\n domElem.showPopover();\n }\n }\n\n closeAll() {\n for (const id of [...this.alerts.keys()]) {\n this.removeDialogComponentFromBody(id);\n }\n }\n}\n","import { Injector } from '@angular/core';\nimport { NGX_MESSAGE_API } from './models/tokens';\nimport { IMessageOptions } from './models/message-options.interface';\n\n/**\n * Static facade so call sites can use: MSG.warn('msg', opts)\n * Module will set the service instance in its constructor.\n */\nexport class MSG {\n static injector: Injector;\n\n static show<T = any>(options?: IMessageOptions) {\n if (!MSG.injector) {\n throw new Error(\n 'ngx-kit: Error on EnvironmentProvider. Ensure \"provideMessage()\" in root provider.',\n );\n }\n\n return MSG.injector.get(NGX_MESSAGE_API).show<T>(options);\n }\n\n static fire(options?: IMessageOptions) {\n return this.show(options);\n }\n\n static info(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'info',\n title,\n text,\n ...options,\n });\n }\n\n static success(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'success',\n title,\n text,\n ...options,\n });\n }\n static warning(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'warning',\n title,\n text,\n ...options,\n });\n }\n static error(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'error',\n title,\n text,\n ...options,\n });\n }\n static question(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'question',\n title,\n text,\n ...options,\n showConfirmButton: true,\n showCancelButton: true,\n });\n }\n static loading(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'loading',\n title,\n text,\n ...options,\n showConfirmButton: false,\n showCancelButton: false,\n showDenyButton: false,\n });\n }\n}\n\nexport class Modal extends MSG {}\n","import {\n EnvironmentProviders,\n inject,\n Injector,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { IMessageOptions } from './models/message-options.interface';\nimport { NGX_MESSAGE_API, NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS } from './models/tokens';\nimport { NgxMessageService } from './services/message.service';\nimport { MSG as MessageFacade } from './message-facade';\nimport { Modal as ModalFacade } from './message-facade';\n\nexport function provideMessage(options?: IMessageOptions): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: NGX_MESSAGE_CONFIGS,\n useValue: { ...NGX_MESSAGE_DEFAULT_OPTIONS, ...(options || {}) },\n },\n {\n provide: NGX_MESSAGE_API,\n useExisting: NgxMessageService,\n },\n provideEnvironmentInitializer(() => {\n MessageFacade.injector = inject(Injector);\n ModalFacade.injector = inject(Injector);\n }),\n ]);\n}\n","import { MessageIcon } from './MessageIcon';\nimport { IMessageOptions } from './message-options.interface';\n\nexport class MessageOptions implements IMessageOptions {\n public constructor(private config?: IMessageOptions) {\n //config = { ...(new MessageOptions()), ...config };\n }\n /**\n * add popover manual to set alert dialog container to top layer\n * - usefull when using alert modal in angular material dialog\n *\n */\n useOverlay?: boolean;\n title?: string = '';\n text?: string = '';\n html?: string | HTMLElement = '';\n backdrop?: boolean = true;\n icon?: MessageIcon;\n width?: number | string;\n allowOutsideClick?: boolean = true;\n allowEscapeKey?: boolean = true;\n allowEnterKey?: boolean = true;\n showConfirmButton?: boolean = true;\n showDenyButton?: boolean = false;\n showCancelButton?: boolean = false;\n confirmButtonText: string = 'Ok';\n denyButtonText?: string = 'No';\n cancelButtonText?: string = 'Cancel';\n confirmButtonColor?: string;\n denyButtonColor?: string;\n cancelButtonColor?: string;\n confirmButtonAriaLabel?: string = '';\n denyButtonAriaLabel?: string = '';\n cancelButtonAriaLabel?: string = '';\n reverseButtons?: boolean = false;\n showCloseButton?: boolean = false;\n containerClass?: string = '';\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DOCUMENT","MessageFacade","ModalFacade"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-kit-message.mjs","sources":["../../../projects/libs/message/models/tokens.ts","../../../projects/libs/message/models/message-result.ts","../../../projects/libs/message/models/icons.ts","../../../projects/libs/message/components/message.component.ts","../../../projects/libs/message/components/message.component.html","../../../projects/libs/message/services/apply-default.ts","../../../projects/libs/message/services/message.service.ts","../../../projects/libs/message/message-facade.ts","../../../projects/libs/message/message-provider.ts","../../../projects/libs/message/models/message-options.ts","../../../projects/libs/message/ngx-kit-message.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { IMessageOptions } from './message-options.interface';\nimport { NgxMessageService } from '../public-api';\nimport { MessageOptions } from './message-options';\n\nexport const NGX_MESSAGE_CONFIGS = new InjectionToken<IMessageOptions>('ngx-message-configs');\n\nexport const NGX_MESSAGE_API = new InjectionToken<NgxMessageService>('NgxMessageService');\nexport const NGX_MESSAGE_DEFAULT_OPTIONS: MessageOptions = {\n useOverlay: true,\n title: '',\n text: '',\n html: '',\n backdrop: true,\n icon: 'None',\n width: undefined,\n allowOutsideClick: true,\n allowEscapeKey: true,\n allowEnterKey: true,\n showConfirmButton: true,\n showDenyButton: false,\n showCancelButton: false,\n confirmButtonText: 'Ok',\n denyButtonText: 'No',\n cancelButtonText: 'Cancel',\n confirmButtonColor: '',\n denyButtonColor: '',\n cancelButtonColor: '',\n confirmButtonAriaLabel: '',\n denyButtonAriaLabel: '',\n cancelButtonAriaLabel: '',\n reverseButtons: false,\n showCloseButton: true,\n containerClass: '',\n};\n","import { EventEmitter } from '@angular/core';\n\nexport type MessageOutput<T = any> = {\n id: number;\n close: () => void;\n afterClose: EventEmitter<MessageResult>;\n};\nexport interface MessageResult<T = any> {\n readonly isConfirmed: boolean;\n readonly isDenied: boolean;\n readonly isDismissed: boolean;\n /**\n * @description ❌⚠️NOT Implemented!⚠️❌\n */\n readonly value?: T;\n readonly dismiss?: DismissReason;\n}\n\n/**\n * An enum of possible reasons that can explain an alert dismissal.\n */\nexport enum DismissReason {\n cancel,\n backdrop,\n close,\n /**\n * @description ❌⚠️NOT Implemented!⚠️❌\n */\n esc,\n /**\n * @description ❌⚠️NOT Implemented!⚠️❌\n */\n timer,\n}\n","// 'None' | 'success' | 'error' | 'warning' | 'info' | 'question' | 'loading';\nexport const ICONS: { [key: string]: string } = {\n None: '',\n success: `<svg viewBox=\"0 0 46 46\"><path class=\"draw\" d=\"M12 24 L20 32 L34 15\"/></svg>`,\n error: `<svg viewBox=\"0 0 46 46\"><path class=\"draw\" d=\"M14 14 L32 32\"/><path class=\"draw\" style=\"animation-delay:.55s\" d=\"M32 14 L14 32\"/></svg>`,\n warning: `<svg viewBox=\"0 0 46 46\"><path class=\"draw\" d=\"M23 10 L23 26\"/><circle class=\"dot-mark\" cx=\"23\" cy=\"34\" r=\"3.4\"/></svg>`,\n info: `<svg viewBox=\"0 0 46 46\"><circle class=\"dot-mark\" cx=\"23\" cy=\"12\" r=\"3.2\" style=\"animation-delay:.28s\"/><path class=\"draw\" style=\"animation-delay:.4s\" d=\"M23 20 L23 36\"/></svg>`,\n question: `<svg viewBox=\"0 0 320 512\"><path fill=\"currentColor\" d=\"M204.3 32.01H96c-52.94 0-96 43.06-96 96c0 17.67 14.31 31.1 32 31.1s32-14.32 32-31.1c0-17.64 14.34-32 32-32h108.3C232.8 96.01 256 119.2 256 147.8c0 19.72-10.97 37.47-30.5 47.33L127.8 252.4C117.1 258.2 112 268.7 112 280v40c0 17.67 14.31 31.99 32 31.99s32-14.32 32-31.99V298.3L256 251.3c39.47-19.75 64-59.42 64-103.5C320 83.95 268.1 32.01 204.3 32.01zM144 400c-22.09 0-40 17.91-40 40s17.91 39.1 40 39.1s40-17.9 40-39.1S166.1 400 144 400z\"/></svg>`,\n loading: `<div class=\"spinner-wrap\"><div class=\"spinner\"></div></div>`,\n};\n","import {\n AfterViewInit,\n Component,\n DOCUMENT,\n ElementRef,\n HostListener,\n inject,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { IMessageOptions } from '../models/message-options.interface';\nimport { Subject } from 'rxjs';\nimport { MessageResult, DismissReason } from '../models/message-result';\nimport { CommonModule } from '@angular/common';\nimport { NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS } from '../models/tokens';\nimport { ICONS } from '../models/icons';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { makeConfetti } from 'ngx-kit/shared';\nimport { NgxMessageService } from '../services/message.service';\n\n@Component({\n selector: 'ngx-message',\n templateUrl: 'message.component.html',\n styleUrls: ['./message.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule],\n providers: [\n {\n provide: NGX_MESSAGE_CONFIGS,\n useValue: NGX_MESSAGE_DEFAULT_OPTIONS,\n },\n ],\n})\nexport class NgxMessageComponent implements OnInit, AfterViewInit {\n icon?: SafeHtml;\n showIcon = signal(true);\n options: IMessageOptions = NGX_MESSAGE_DEFAULT_OPTIONS;\n confetti = viewChild<ElementRef<HTMLDivElement>>('confetti');\n index = 0;\n\n protected sanitizer = inject(DomSanitizer);\n protected doc = inject(DOCUMENT);\n private readonly messageService = inject(NgxMessageService);\n\n private readonly _onClose = new Subject<{ index: number; result: MessageResult<any> }>();\n public onClose = this._onClose.asObservable();\n\n ngOnInit(): void {\n this.showIcon.update((x) => (x = this.options.icon != 'None'));\n this.icon = this.sanitizer.bypassSecurityTrustHtml(ICONS[this.options.icon ?? 'None']);\n }\n\n ngAfterViewInit(): void {\n const confetti = this.confetti()?.nativeElement;\n if (this.options.icon == 'success' && confetti) {\n makeConfetti(this.doc, confetti);\n }\n }\n\n /**\n * وقتی چند تا پیام همزمان باز باشن، هرکدوم listener خودشو روی document\n * داشت — پس یه فشردن Escape/Enter، رویداد رو به *همهشون* همزمان میفرستاد،\n * نه فقط آخرین پیامی که باز شده (رفتار طبیعیِ یه استکِ مودال باید این باشه\n * که فقط بالاترین لایه به کیبورد واکنش نشون بده). این چک همون چیزیه که\n * OverlayService با getLastDialog() برای اورلیها انجام میده.\n */\n private isTopmost(): boolean {\n const ids = [...this.messageService.alerts.keys()];\n if (!ids.length) return true;\n return this.index === Math.max(...ids);\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n onScapeKey(event: Event) {\n if (this.options.allowEscapeKey && this.isTopmost()) {\n this.onCancel();\n }\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n onEnterKey(event: Event) {\n if (!this.isTopmost()) return;\n event.stopPropagation();\n event.preventDefault();\n if (this.options.allowEnterKey) {\n if (this.options.showConfirmButton) {\n this.onConfirm();\n } else if (this.options.showDenyButton) {\n this.onDeny();\n } else {\n this.onCancel();\n }\n }\n }\n\n onConfirm() {\n this._onClose.next({\n index: this.index,\n result: {\n isConfirmed: true,\n isDismissed: false,\n isDenied: false,\n dismiss: DismissReason.close,\n },\n });\n }\n onCancel() {\n this._onClose.next({\n index: this.index,\n result: {\n isConfirmed: false,\n isDismissed: true,\n isDenied: false,\n dismiss: DismissReason.cancel,\n },\n });\n }\n onDeny() {\n this._onClose.next({\n index: this.index,\n result: {\n isConfirmed: false,\n isDismissed: false,\n isDenied: true,\n dismiss: DismissReason.close,\n },\n });\n }\n close() {\n this.onCancel();\n }\n\n onOutSideClick() {\n if (this.options.allowOutsideClick) {\n this.onCancel();\n }\n }\n innerOnClick(ev: Event) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n}\n","<div\n class=\"ngx-msg-overlay show\"\n (click)=\"onOutSideClick()\"\n [ngClass]=\"options.containerClass\"\n [class.has-backdrop]=\"options.backdrop\"\n [attr.data-type]=\"options.icon\">\n <div class=\"ngx-msg-modal\" (click)=\"innerOnClick($event)\">\n <div class=\"confetti\" #confetti></div>\n @if (options.showCloseButton) {\n <button class=\"close-x\" (click)=\"close()\" aria-label=\"Close\">✕</button>\n }\n @if (showIcon()) {\n <div class=\"icon-stage\">\n <div class=\"icon-ring\"></div>\n <div class=\"icon-disc\" [innerHTML]=\"icon\"></div>\n </div>\n }\n <h2>{{ options.title }}</h2>\n <p class=\"desc\">\n {{ options.text }}\n <span [innerHTML]=\"options.html\"></span>\n </p>\n\n <div class=\"ngx-msg-actions\">\n @if (options.showCancelButton) {\n <button\n class=\"btn btn-ghost\"\n (click)=\"onCancel()\"\n [attr.aria-label]=\"options.cancelButtonAriaLabel\">\n {{ options.cancelButtonText }}\n </button>\n }\n @if (options.showDenyButton) {\n <button\n class=\"btn btn-ghost\"\n (click)=\"onDeny()\"\n [attr.aria-label]=\"options.denyButtonAriaLabel\">\n {{ options.denyButtonText }}\n </button>\n }\n @if (options.showConfirmButton) {\n <button\n class=\"btn btn-primary\"\n (click)=\"onConfirm()\"\n [attr.aria-label]=\"options.confirmButtonAriaLabel\">\n {{ options.confirmButtonText }}\n </button>\n }\n </div>\n </div>\n</div>\n","export function applyDefaultConfig(config: any, defaultConfig: any): any {\n var config = JSON.parse(JSON.stringify(config));\n for (let key in defaultConfig) {\n if (config[key] === undefined || config[key] === null || config[key] === '') {\n config[key] = defaultConfig[key];\n } else if (typeof config[key] === 'object') {\n config[key] = applyDefaultConfig(config[key], defaultConfig[key]);\n }\n }\n return config;\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EmbeddedViewRef,\n EnvironmentInjector,\n EventEmitter,\n Inject,\n Injectable,\n Injector,\n} from '@angular/core';\nimport { NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS } from '../models/tokens';\nimport { IMessageOptions } from '../models/message-options.interface';\nimport { MessageOutput, MessageResult } from '../models/message-result';\nimport { DOCUMENT } from '@angular/common';\nimport { NgxMessageComponent } from '../components/message.component';\nimport { applyDefaultConfig } from './apply-default';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgxMessageService {\n // قبلاً یه آرایهی معمولی بود (`ComponentRef[]`) و removeDialogComponentFromBody\n // فقط componentRef رو destroy میکرد ولی هیچوقت از آرایه حذفش نمیکرد — یعنی\n // این سرویس (که providedIn:'root' و singleton سراسریه) به ازای هر پیامی که\n // تا حالا تو کل عمر اپ نشون داده شده، یک رفرنس destroy-شده رو برای همیشه نگه\n // میداشت: یک نشتی حافظهی پیوسته. با Map<id, ComponentRef> جایگزین شد که\n // با delete واقعاً entry رو آزاد میکنه؛ کلید هم شناسهی پایدارِ پیام (insertedId)\n // هست، نه موقعیتِ آرایه (که با splice ممکن بود جابهجا و نامعتبر بشه).\n alerts = new Map<number, ComponentRef<NgxMessageComponent>>();\n insertedId = 0;\n constructor(\n private appRef: ApplicationRef,\n private injector: Injector,\n private envInjector: EnvironmentInjector,\n @Inject(DOCUMENT) private _doc: Document,\n ) {}\n\n public show<T = any>(c?: IMessageOptions): MessageOutput<T> {\n let d = applyDefaultConfig(\n this.injector.get(NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS),\n NGX_MESSAGE_DEFAULT_OPTIONS,\n );\n const config = applyDefaultConfig(c, d);\n\n const componentRef = createComponent(NgxMessageComponent, {\n environmentInjector: this.envInjector,\n });\n\n this.appRef.attachView(componentRef.hostView);\n const id = this.insertedId++;\n const payload: MessageOutput<T> = {\n close: () => componentRef.instance.close(),\n id,\n afterClose: new EventEmitter(),\n };\n this.appendDialogComponentToBody(componentRef, config);\n componentRef.instance.options = config;\n componentRef.instance.index = id;\n componentRef.instance.onClose.subscribe((result) => {\n this.removeDialogComponentFromBody(result.index);\n payload.afterClose.emit(result.result);\n });\n this.alerts.set(id, componentRef);\n\n return payload;\n }\n\n private removeDialogComponentFromBody(id: number): void {\n const ref = this.alerts.get(id);\n if (!ref) return;\n\n const domElem = (ref.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n\n // قبل از destroy باید hidePopover صدا بزنیم\n if (domElem.popover === 'manual') {\n try {\n domElem.hidePopover();\n } catch {}\n }\n\n this.appRef.detachView(ref.hostView);\n ref.destroy();\n this.alerts.delete(id);\n }\n\n private appendDialogComponentToBody(\n componentRef: ComponentRef<NgxMessageComponent>,\n config: IMessageOptions,\n ) {\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n if (config.containerClass) {\n for (let c of config.containerClass.split(' ')) {\n if (c.trim()) domElem.classList.add(c);\n }\n }\n this._doc.body.appendChild(domElem);\n if (config.useOverlay) {\n domElem.popover = 'manual';\n domElem.showPopover();\n }\n }\n\n closeAll() {\n for (const id of [...this.alerts.keys()]) {\n this.removeDialogComponentFromBody(id);\n }\n }\n}\n","import { Injector } from '@angular/core';\nimport { NGX_MESSAGE_API } from './models/tokens';\nimport { IMessageOptions } from './models/message-options.interface';\n\n/**\n * Static facade so call sites can use: MSG.warn('msg', opts)\n * Module will set the service instance in its constructor.\n */\nexport class MSG {\n static injector: Injector;\n\n static show<T = any>(options?: IMessageOptions) {\n if (!MSG.injector) {\n throw new Error(\n 'ngx-kit: Error on EnvironmentProvider. Ensure \"provideMessage()\" in root provider.',\n );\n }\n\n return MSG.injector.get(NGX_MESSAGE_API).show<T>(options);\n }\n\n static fire(options?: IMessageOptions) {\n return this.show(options);\n }\n\n static info(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'info',\n title,\n text,\n ...options,\n });\n }\n\n static success(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'success',\n title,\n text,\n ...options,\n });\n }\n static warning(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'warning',\n title,\n text,\n ...options,\n });\n }\n static error(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'error',\n title,\n text,\n ...options,\n });\n }\n static question(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'question',\n title,\n text,\n ...options,\n showConfirmButton: true,\n showCancelButton: true,\n });\n }\n static loading(title: string, text?: string, options?: IMessageOptions) {\n return this.show({\n icon: 'loading',\n title,\n text,\n ...options,\n showConfirmButton: false,\n showCancelButton: false,\n showDenyButton: false,\n });\n }\n}\n\nexport class Modal extends MSG {}\n","import {\n EnvironmentProviders,\n inject,\n Injector,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { IMessageOptions } from './models/message-options.interface';\nimport { NGX_MESSAGE_API, NGX_MESSAGE_CONFIGS, NGX_MESSAGE_DEFAULT_OPTIONS } from './models/tokens';\nimport { NgxMessageService } from './services/message.service';\nimport { MSG as MessageFacade } from './message-facade';\nimport { Modal as ModalFacade } from './message-facade';\n\nexport function provideMessage(options?: IMessageOptions): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: NGX_MESSAGE_CONFIGS,\n useValue: { ...NGX_MESSAGE_DEFAULT_OPTIONS, ...(options || {}) },\n },\n {\n provide: NGX_MESSAGE_API,\n useExisting: NgxMessageService,\n },\n provideEnvironmentInitializer(() => {\n MessageFacade.injector = inject(Injector);\n ModalFacade.injector = inject(Injector);\n }),\n ]);\n}\n","import { MessageIcon } from './MessageIcon';\nimport { IMessageOptions } from './message-options.interface';\n\nexport class MessageOptions implements IMessageOptions {\n public constructor(private config?: IMessageOptions) {\n //config = { ...(new MessageOptions()), ...config };\n }\n /**\n * add popover manual to set alert dialog container to top layer\n * - usefull when using alert modal in angular material dialog\n *\n */\n useOverlay?: boolean;\n title?: string = '';\n text?: string = '';\n html?: string | HTMLElement = '';\n backdrop?: boolean = true;\n icon?: MessageIcon;\n width?: number | string;\n allowOutsideClick?: boolean = true;\n allowEscapeKey?: boolean = true;\n allowEnterKey?: boolean = true;\n showConfirmButton?: boolean = true;\n showDenyButton?: boolean = false;\n showCancelButton?: boolean = false;\n confirmButtonText: string = 'Ok';\n denyButtonText?: string = 'No';\n cancelButtonText?: string = 'Cancel';\n confirmButtonColor?: string;\n denyButtonColor?: string;\n cancelButtonColor?: string;\n confirmButtonAriaLabel?: string = '';\n denyButtonAriaLabel?: string = '';\n cancelButtonAriaLabel?: string = '';\n reverseButtons?: boolean = false;\n showCloseButton?: boolean = false;\n containerClass?: string = '';\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DOCUMENT","MessageFacade","ModalFacade"],"mappings":"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"}
|