@mintplayer/ng-bootstrap 21.28.0 → 21.30.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/mintplayer-ng-bootstrap-multi-range.mjs +693 -0
- package/fesm2022/mintplayer-ng-bootstrap-multi-range.mjs.map +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-tile-manager.mjs +1332 -0
- package/fesm2022/mintplayer-ng-bootstrap-tile-manager.mjs.map +1 -0
- package/package.json +9 -1
- package/types/mintplayer-ng-bootstrap-multi-range.d.ts +170 -0
- package/types/mintplayer-ng-bootstrap-tile-manager.d.ts +285 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mintplayer-ng-bootstrap-tile-manager.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/tile-manager/src/lib/components/tile.component.ts","../../../../libs/mintplayer-ng-bootstrap/tile-manager/src/lib/components/tile-manager.component.ts","../../../../libs/mintplayer-ng-bootstrap/tile-manager/src/lib/components/tile-header.component.ts","../../../../libs/mintplayer-ng-bootstrap/tile-manager/src/lib/types/grid-rect.ts","../../../../libs/mintplayer-ng-bootstrap/tile-manager/src/lib/utils/pack.ts","../../../../libs/mintplayer-ng-bootstrap/tile-manager/src/lib/web-components/mint-tile-manager.element.template.ts","../../../../libs/mintplayer-ng-bootstrap/tile-manager/src/lib/web-components/mint-tile-manager.element.ts","../../../../libs/mintplayer-ng-bootstrap/tile-manager/mintplayer-ng-bootstrap-tile-manager.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport { TilePosition } from '../types/tile-position';\n\n/**\n * One tile inside a `<bs-tile-manager>`.\n *\n * The component captures two `TemplateRef`s — one for the header (a child\n * `<bs-tile-header>`) and one for the body (everything else) — which the\n * manager projects into named slots on the underlying `<mp-tile-manager>`\n * web component (`${id}-header` and `${id}-content`).\n */\n@Component({\n selector: 'bs-tile',\n template: `\n <ng-template #headerTpl>\n <ng-content select=\"bs-tile-header\"></ng-content>\n </ng-template>\n <ng-template #contentTpl>\n <ng-content></ng-content>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsTileComponent {\n readonly id = input.required<string>();\n readonly position = input.required<TilePosition>();\n readonly disableMove = input<boolean>(false);\n readonly disableResize = input<boolean>(false);\n readonly label = input<string | null>(null);\n\n readonly positionChange = output<TilePosition>();\n\n readonly headerTpl = viewChild.required<TemplateRef<unknown>>('headerTpl');\n readonly contentTpl = viewChild.required<TemplateRef<unknown>>('contentTpl');\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n ElementRef,\n computed,\n contentChildren,\n effect,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { BsTileComponent } from './tile.component';\nimport {\n MintTile,\n MintTileManagerElement,\n TileDragMode,\n TileResizeMode,\n} from '../web-components/mint-tile-manager.element';\nimport { TileLayoutSnapshot, TileGestureBlocked } from '../types/tile-layout-snapshot';\nimport { TilePosition } from '../types/tile-position';\n\n@Component({\n selector: 'bs-tile-manager',\n template: `\n <mp-tile-manager\n #manager\n class=\"bs-tile-manager\"\n [attr.column-count]=\"columnCountAttr()\"\n [attr.min-column-width]=\"minColumnWidth()\"\n [attr.min-row-height]=\"minRowHeight()\"\n [attr.gap]=\"gap()\"\n [attr.drag-mode]=\"dragMode()\"\n [attr.resize-mode]=\"resizeMode()\"\n [attr.animate-reflow]=\"animateReflow() ? '' : null\"\n [attr.label]=\"label()\"\n (tilelayoutchange)=\"onLayoutChange($event)\"\n (tilepositionchange)=\"onPositionChange($event)\"\n (tilegestureblocked)=\"onGestureBlocked($event)\"\n >\n @for (tile of tiles(); track tile.id()) {\n <div [attr.slot]=\"tile.id() + '-header'\" class=\"bs-tile-slot\">\n <ng-container *ngTemplateOutlet=\"tile.headerTpl()\"></ng-container>\n </div>\n <div [attr.slot]=\"tile.id() + '-content'\" class=\"bs-tile-slot\">\n <ng-container *ngTemplateOutlet=\"tile.contentTpl()\"></ng-container>\n </div>\n }\n </mp-tile-manager>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n .bs-tile-manager {\n display: block;\n width: 100%;\n }\n .bs-tile-slot {\n display: contents;\n }\n `,\n ],\n imports: [NgTemplateOutlet],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsTileManagerComponent implements AfterViewInit {\n readonly columnCount = input<number | null>(null);\n readonly minColumnWidth = input<string>('200px');\n readonly minRowHeight = input<string>('8rem');\n readonly gap = input<string>('0.5rem');\n readonly dragMode = input<TileDragMode>('header');\n readonly resizeMode = input<TileResizeMode>('hover');\n readonly animateReflow = input<boolean>(true);\n readonly label = input<string | null>(null);\n\n readonly layoutChange = output<TileLayoutSnapshot>();\n readonly gestureBlocked = output<TileGestureBlocked>();\n\n readonly tiles = contentChildren(BsTileComponent);\n readonly managerRef = viewChild<ElementRef<MintTileManagerElement>>('manager');\n\n protected readonly columnCountAttr = computed(() => {\n const c = this.columnCount();\n return c && c > 0 ? String(c) : null;\n });\n\n // Snapshot of Angular tile state, derived from contentChildren signals.\n // Re-runs whenever any tile's id, position, disableMove, disableResize, or label changes.\n // contentChildren() can surface a child before Angular has finished binding its\n // required inputs; reading them then throws NG0950. flatMap-with-try lets us\n // skip the not-yet-bound entry — the effect re-runs once binding completes.\n private readonly tilesSnapshot = computed<MintTile[]>(() =>\n this.tiles().flatMap((t) => {\n try {\n return [{\n id: t.id(),\n position: t.position(),\n disableMove: t.disableMove(),\n disableResize: t.disableResize(),\n label: t.label(),\n }];\n } catch {\n return [];\n }\n }),\n );\n\n constructor() {\n effect(() => {\n const snapshot = this.tilesSnapshot();\n const ref = this.managerRef();\n if (!ref) return;\n ref.nativeElement.tiles = snapshot;\n });\n }\n\n ngAfterViewInit(): void {\n // First push happens via the constructor effect once the view is alive.\n }\n\n /** Returns the current layout. Mirrors `BsDockManagerComponent.captureLayout()`. */\n captureLayout(): TileLayoutSnapshot {\n const ref = this.managerRef();\n if (!ref) return [];\n return Array.from(ref.nativeElement.tiles ?? []).map((t) => ({\n id: t.id,\n position: { ...t.position },\n }));\n }\n\n protected onLayoutChange(event: Event): void {\n const detail = (event as CustomEvent<TileLayoutSnapshot>).detail;\n if (detail) this.layoutChange.emit(detail);\n }\n\n protected onPositionChange(event: Event): void {\n const detail = (event as CustomEvent<{ id: string; position: TilePosition }>).detail;\n if (!detail) return;\n const tile = this.tiles().find((t) => t.id() === detail.id);\n tile?.positionChange.emit(detail.position);\n }\n\n protected onGestureBlocked(event: Event): void {\n const detail = (event as CustomEvent<TileGestureBlocked>).detail;\n if (detail) this.gestureBlocked.emit(detail);\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'bs-tile-header',\n template: `<ng-content></ng-content>`,\n styles: [\n `:host {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.5rem 0.75rem;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--bs-body-color, inherit);\n background: linear-gradient(to bottom, rgba(var(--bs-primary-rgb, 13, 110, 253), 0.10), rgba(var(--bs-primary-rgb, 13, 110, 253), 0.04));\n border-bottom: 1px solid var(--bs-border-color, #dee2e6);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n touch-action: none;\n user-select: none;\n -webkit-user-select: none;\n -webkit-touch-callout: none;\n }`,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsTileHeaderComponent {}\n","/**\n * Half-open rectangle in grid coordinates: `[colStart, colStart + colSpan) × [rowStart, rowStart + rowSpan)`.\n * Same shape as `TilePosition` but used internally for overlap math; kept\n * as its own type so call-sites read clearly.\n */\nexport interface GridRect {\n colStart: number;\n rowStart: number;\n colSpan: number;\n rowSpan: number;\n}\n\nexport function rectsOverlap(a: GridRect, b: GridRect): boolean {\n return (\n a.colStart < b.colStart + b.colSpan &&\n b.colStart < a.colStart + a.colSpan &&\n a.rowStart < b.rowStart + b.rowSpan &&\n b.rowStart < a.rowStart + a.rowSpan\n );\n}\n","import { TilePosition } from '../types/tile-position';\nimport { TileLayoutSnapshot } from '../types/tile-layout-snapshot';\nimport { GridRect, rectsOverlap } from '../types/grid-rect';\n\ninterface PackInputTile {\n id: string;\n position: TilePosition;\n locked: boolean;\n}\n\ninterface Placement {\n id: string;\n position: TilePosition;\n}\n\n/**\n * Vertical-compact packer. The pinned tile's rect is the user's gesture; all\n * other tiles flow around it (locked tiles stay put; movable tiles get pushed\n * out of the way and gravity-compacted upward).\n *\n * Returns `blocked: true` if the pinned rect overlaps a locked tile or no\n * valid layout exists; the caller should snap back and not commit.\n */\nexport function pack(\n tiles: ReadonlyArray<PackInputTile>,\n pinned: { id: string; rect: GridRect },\n columnCount: number,\n): { layout: TileLayoutSnapshot; blocked: boolean } {\n const pinnedTile = tiles.find((t) => t.id === pinned.id);\n if (!pinnedTile) {\n throw new Error(`pack: pinned tile \"${pinned.id}\" is not in the tiles array`);\n }\n\n const pinnedPlacement: Placement = { id: pinned.id, position: { ...pinned.rect } };\n\n const lockedPlacements: ReadonlyArray<Placement> = tiles\n .filter((t) => t.locked && t.id !== pinned.id)\n .map((t) => ({ id: t.id, position: { ...t.position } }));\n\n const lockedOverlap = lockedPlacements.some((l) =>\n rectsOverlap(l.position, pinnedPlacement.position),\n );\n if (lockedOverlap) {\n return { layout: snapshotFromInput(tiles), blocked: true };\n }\n\n const fixed: ReadonlyArray<Placement> = [pinnedPlacement, ...lockedPlacements];\n\n const movables = tiles\n .filter((t) => !t.locked && t.id !== pinned.id)\n .slice()\n .sort((a, b) => {\n const dRow = a.position.rowStart - b.position.rowStart;\n return dRow !== 0 ? dRow : a.position.colStart - b.position.colStart;\n });\n\n const placedMovables = movables.reduce<Placement[]>((acc, t) => {\n const all = [...fixed, ...acc];\n const placed = placeTile(t, all, columnCount);\n return placed ? [...acc, placed] : acc;\n }, []);\n\n if (placedMovables.length !== movables.length) {\n return { layout: snapshotFromInput(tiles), blocked: true };\n }\n\n const compacted = compactStable(placedMovables, fixed, columnCount);\n\n const placementById = new Map<string, TilePosition>(\n [pinnedPlacement, ...lockedPlacements, ...compacted].map((p) => [p.id, p.position]),\n );\n\n // Preserve the input tile order in the output snapshot — keeps layout\n // identity stable across pack() calls with the same input.\n const layout: TileLayoutSnapshot = tiles.map((t) => ({\n id: t.id,\n position: placementById.get(t.id) ?? { ...t.position },\n }));\n\n return { layout, blocked: false };\n}\n\nfunction snapshotFromInput(tiles: ReadonlyArray<PackInputTile>): TileLayoutSnapshot {\n return tiles.map((t) => ({ id: t.id, position: { ...t.position } }));\n}\n\nfunction placeTile(\n tile: PackInputTile,\n obstacles: ReadonlyArray<Placement>,\n columnCount: number,\n): Placement | null {\n const { colSpan, rowSpan } = tile.position;\n if (colSpan > columnCount) return null;\n\n const inPlaceFits = !obstacles.some((o) => rectsOverlap(tile.position, o.position));\n if (inPlaceFits) {\n return { id: tile.id, position: { ...tile.position } };\n }\n\n const candidate = firstFit({ colSpan, rowSpan }, obstacles, columnCount);\n return candidate ? { id: tile.id, position: candidate } : null;\n}\n\nfunction firstFit(\n size: { colSpan: number; rowSpan: number },\n obstacles: ReadonlyArray<Placement>,\n columnCount: number,\n): TilePosition | null {\n const lastRow = obstacles.reduce(\n (max, o) => Math.max(max, o.position.rowStart + o.position.rowSpan - 1),\n 0,\n );\n // Worst case: stack right after the bottommost obstacle.\n const rowsToTry = lastRow + size.rowSpan;\n const cols = columnCount - size.colSpan + 1;\n if (cols < 1) return null;\n\n // Imperative loops here are deliberate — this runs on every pointermove\n // during a drag (live reflow) and the array-allocation patterns previously\n // used here generated GC pressure visible as drag jank.\n for (let rowStart = 1; rowStart <= rowsToTry; rowStart++) {\n for (let c = 0; c < cols; c++) {\n const colStart = c + 1;\n let collides = false;\n for (let i = 0; i < obstacles.length; i++) {\n if (\n rectsOverlap(\n { rowStart, colStart, colSpan: size.colSpan, rowSpan: size.rowSpan },\n obstacles[i].position,\n )\n ) {\n collides = true;\n break;\n }\n }\n if (!collides) {\n return { rowStart, colStart, colSpan: size.colSpan, rowSpan: size.rowSpan };\n }\n }\n }\n return null;\n}\n\nfunction compactStable(\n placements: ReadonlyArray<Placement>,\n fixed: ReadonlyArray<Placement>,\n columnCount: number,\n): ReadonlyArray<Placement> {\n return iterate(placements, fixed, columnCount, 10);\n}\n\nfunction iterate(\n placements: ReadonlyArray<Placement>,\n fixed: ReadonlyArray<Placement>,\n columnCount: number,\n iterations: number,\n): ReadonlyArray<Placement> {\n if (iterations <= 0) return placements;\n const { result, changed } = compactOnce(placements, fixed, columnCount);\n return changed ? iterate(result, fixed, columnCount, iterations - 1) : result;\n}\n\nfunction compactOnce(\n placements: ReadonlyArray<Placement>,\n fixed: ReadonlyArray<Placement>,\n columnCount: number,\n): { result: ReadonlyArray<Placement>; changed: boolean } {\n // Process in current visual order: top-to-bottom, then left-to-right.\n const ordered = placements\n .slice()\n .sort((a, b) => {\n const dRow = a.position.rowStart - b.position.rowStart;\n return dRow !== 0 ? dRow : a.position.colStart - b.position.colStart;\n });\n\n return ordered.reduce<{ result: Placement[]; changed: boolean }>(\n (acc, p) => {\n const others = [...fixed, ...acc.result.filter((r) => r.id !== p.id)];\n const slid = slideUp(p.position, others);\n const changed = slid.rowStart !== p.position.rowStart;\n return {\n result: [...acc.result, { id: p.id, position: slid }],\n changed: acc.changed || changed,\n };\n },\n { result: [], changed: false },\n );\n}\n\nfunction slideUp(pos: TilePosition, others: ReadonlyArray<Placement>): TilePosition {\n if (pos.rowStart <= 1) return pos;\n // Same hot path as firstFit — keep imperative for GC-pressure reasons.\n for (let rowStart = 1; rowStart < pos.rowStart; rowStart++) {\n let collides = false;\n for (let i = 0; i < others.length; i++) {\n if (rectsOverlap({ ...pos, rowStart }, others[i].position)) {\n collides = true;\n break;\n }\n }\n if (!collides) return { ...pos, rowStart };\n }\n return pos;\n}\n","// AUTO-GENERATED — do not edit by hand.\n// Source: mint-tile-manager.element.html + mint-tile-manager.element.scss\n// Regenerate with the codegen-wc Nx target.\n\nimport { html, unsafeCSS } from 'lit';\n\nexport const template = html`<!-- Tile shells are rendered dynamically by render(). This file exists so the\n codegen-wc target produces a \\`styles\\` export from the sibling .scss; the\n \\`template\\` export it generates is intentionally unused. -->`;\nexport const styles = unsafeCSS(`:host {\n display: block;\n position: relative;\n box-sizing: border-box;\n width: 100%;\n contain: layout paint style;\n --bs-tile-radius: 0.5rem;\n --bs-tile-bg: var(--bs-body-bg, #fff);\n --bs-tile-border: var(--bs-border-color, #dee2e6);\n --bs-tile-shadow: var(--bs-box-shadow-sm, 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075));\n --bs-tile-handle-color: var(--bs-secondary, #6c757d);\n --bs-tile-blocked-color: var(--bs-danger, #dc3545);\n}\n\n.tile-grid {\n display: grid;\n grid-auto-rows: var(--mp-tile-row-height, 8rem);\n gap: var(--mp-tile-gap, 0.5rem);\n width: 100%;\n position: relative;\n}\n\n.tile {\n position: relative;\n display: flex;\n flex-direction: column;\n background: var(--bs-tile-bg);\n border: 1px solid var(--bs-tile-border);\n border-radius: var(--bs-tile-radius);\n box-shadow: var(--bs-tile-shadow);\n overflow: hidden;\n min-width: 0;\n min-height: 0;\n transition: transform 150ms cubic-bezier(0.2, 0, 0, 1);\n will-change: transform;\n}\n\n.tile[data-dragging=true] {\n z-index: 5;\n cursor: grabbing;\n box-shadow: var(--bs-box-shadow, 0 0.5rem 1rem rgba(0, 0, 0, 0.15));\n transition: none;\n}\n\n.tile[data-resizing=true] {\n z-index: 4;\n transition: none;\n}\n\n.tile[data-blocked=true] {\n outline: 2px solid var(--bs-tile-blocked-color);\n outline-offset: -2px;\n animation: tile-shake 200ms ease-in-out;\n}\n\n@keyframes tile-shake {\n 0%, 100% {\n transform: translateX(0);\n }\n 25% {\n transform: translateX(-3px);\n }\n 75% {\n transform: translateX(3px);\n }\n}\n.tile[data-pressing=true] {\n filter: brightness(0.96);\n transition: filter 100ms ease-out;\n}\n\n.tile__header-shell {\n flex: 0 0 auto;\n user-select: none;\n -webkit-user-select: none;\n -webkit-touch-callout: none;\n cursor: grab;\n}\n\n.tile[data-drag-mode=off] .tile__header-shell,\n.tile[data-locked-move=true] .tile__header-shell {\n cursor: default;\n}\n\n.tile__content-shell {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n overflow: auto;\n}\n\n.tile__resize-side,\n.tile__resize-bottom,\n.tile__resize-corner {\n position: absolute;\n z-index: 2;\n background: transparent;\n touch-action: none;\n -webkit-user-select: none;\n user-select: none;\n opacity: 0;\n transition: opacity 120ms ease-out;\n}\n\n.tile:hover .tile__resize-side,\n.tile:hover .tile__resize-bottom,\n.tile:hover .tile__resize-corner,\n:host([resize-mode=always]) .tile__resize-side,\n:host([resize-mode=always]) .tile__resize-bottom,\n:host([resize-mode=always]) .tile__resize-corner {\n opacity: 1;\n}\n\n@media (pointer: coarse) {\n .tile__resize-side,\n .tile__resize-bottom,\n .tile__resize-corner {\n opacity: 1;\n }\n}\n.tile__resize-side {\n right: -2px;\n top: 25%;\n bottom: 25%;\n width: 6px;\n cursor: ew-resize;\n}\n\n.tile__resize-bottom {\n left: 25%;\n right: 25%;\n bottom: -2px;\n height: 6px;\n cursor: ns-resize;\n}\n\n.tile__resize-corner {\n right: -2px;\n bottom: -2px;\n width: 14px;\n height: 14px;\n cursor: nwse-resize;\n}\n\n.tile__resize-corner::before {\n content: \"\";\n position: absolute;\n right: 3px;\n bottom: 3px;\n width: 8px;\n height: 8px;\n border-right: 2px solid var(--bs-tile-handle-color);\n border-bottom: 2px solid var(--bs-tile-handle-color);\n border-bottom-right-radius: 2px;\n}\n\n:host([resize-mode=off]) .tile__resize-side,\n:host([resize-mode=off]) .tile__resize-bottom,\n:host([resize-mode=off]) .tile__resize-corner {\n display: none;\n}\n\n.tile[data-locked-resize=true] .tile__resize-side,\n.tile[data-locked-resize=true] .tile__resize-bottom,\n.tile[data-locked-resize=true] .tile__resize-corner {\n display: none;\n}\n\n.tile-grid__live-region {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .tile {\n transition: none !important;\n }\n .tile[data-blocked=true] {\n animation: none;\n }\n}\n:host(:focus-visible) {\n outline: 2px solid var(--bs-primary, #0d6efd);\n outline-offset: 2px;\n}\n\n.tile:focus-visible {\n outline: 2px solid var(--bs-primary, #0d6efd);\n outline-offset: -2px;\n}`);\n","import { LitElement, html, type TemplateResult, type PropertyValues, nothing } from 'lit';\nimport { TilePosition } from '../types/tile-position';\nimport { TileLayoutSnapshot, TileGestureBlocked } from '../types/tile-layout-snapshot';\nimport { GridRect } from '../types/grid-rect';\nimport { pack } from '../utils/pack';\nimport { styles } from './mint-tile-manager.element.template';\n\nexport interface MintTile {\n id: string;\n position: TilePosition;\n disableMove: boolean;\n disableResize: boolean;\n label: string | null;\n}\n\nexport type TileDragMode = 'tile' | 'header' | 'off';\nexport type TileResizeMode = 'hover' | 'always' | 'off';\n\ntype GestureState =\n | { kind: 'idle' }\n | {\n kind: 'arming-touch-drag';\n pointerId: number;\n tileId: string;\n startX: number;\n startY: number;\n timer: number | null;\n pressingTimer: number | null;\n }\n | {\n kind: 'drag';\n pointerId: number;\n tileId: string;\n pointerOffset: { dx: number; dy: number };\n currentRect: GridRect;\n blocked: boolean;\n }\n | {\n kind: 'resize';\n pointerId: number;\n tileId: string;\n mode: 'side' | 'bottom' | 'corner';\n startPointer: { x: number; y: number };\n startSpans: { colSpan: number; rowSpan: number };\n currentRect: GridRect;\n blocked: boolean;\n };\n\ntype KeyboardMode =\n | { kind: 'idle' }\n | { kind: 'move'; tileId: string }\n | { kind: 'resize'; tileId: string };\n\nconst TOUCH_LONG_PRESS_MS = 600;\nconst TOUCH_LONG_PRESS_SLOP_PX = 10;\nconst TOUCH_PRESS_FEEDBACK_DELAY_MS = 150;\nconst POINTER_DRAG_THRESHOLD_PX = 5;\n\nexport class MintTileManagerElement extends LitElement {\n static override styles = [styles];\n\n static override get observedAttributes(): string[] {\n return [\n ...(super.observedAttributes ?? []),\n 'column-count',\n 'min-column-width',\n 'min-row-height',\n 'gap',\n 'drag-mode',\n 'resize-mode',\n 'animate-reflow',\n 'label',\n ];\n }\n\n static override properties = {\n tiles: { attribute: false },\n columnCount: { attribute: 'column-count', type: Number },\n minColumnWidth: { attribute: 'min-column-width', type: String },\n minRowHeight: { attribute: 'min-row-height', type: String },\n gap: { attribute: 'gap', type: String },\n dragMode: { attribute: 'drag-mode', type: String, reflect: true },\n resizeMode: { attribute: 'resize-mode', type: String, reflect: true },\n animateReflow: { attribute: 'animate-reflow', type: Boolean },\n label: { attribute: 'label', type: String },\n previewLayout: { state: true },\n gestureKind: { state: true },\n blocked: { state: true },\n effectiveColumnCount: { state: true },\n keyboardMode: { state: true },\n liveRegionMessage: { state: true },\n };\n\n tiles: ReadonlyArray<MintTile> = [];\n columnCount: number | null = null;\n minColumnWidth = '200px';\n minRowHeight = '8rem';\n gap = '0.5rem';\n dragMode: TileDragMode = 'header';\n resizeMode: TileResizeMode = 'hover';\n animateReflow = true;\n label: string | null = null;\n\n private gestureState: GestureState = { kind: 'idle' };\n private keyboardState: KeyboardMode = { kind: 'idle' };\n\n // State-tracked redraw triggers (Lit re-renders when these change).\n protected previewLayout: TileLayoutSnapshot | null = null;\n protected gestureKind: GestureState['kind'] = 'idle';\n protected blocked = false;\n protected effectiveColumnCount = 1;\n protected liveRegionMessage = '';\n\n private hostResizeObserver: ResizeObserver | null = null;\n private flipPreviousRects: Map<string, DOMRect> = new Map();\n\n // Cached layout metrics. Refreshed lazily in updated()/firstUpdated() and on\n // ResizeObserver ticks — never from render(), so the per-tile pointer-move\n // path stays free of getComputedStyle / getBoundingClientRect calls.\n private cellMetrics = { width: 0, height: 0, gapX: 0, gapY: 0 };\n\n // Bound handlers — created once so add/remove pair correctly.\n private readonly onWindowPointerMove = (e: PointerEvent) => this.handlePointerMove(e);\n private readonly onWindowPointerUp = (e: PointerEvent) => this.handlePointerUp(e);\n private readonly onWindowPointerCancel = (e: PointerEvent) => this.handlePointerCancel(e);\n private readonly onWindowKeyDown = (e: KeyboardEvent) => this.handleEscapeKey(e);\n private readonly onVisibilityChange = () => {\n if (document.visibilityState === 'hidden') this.cancelGesture();\n };\n\n override render(): TemplateResult {\n const layoutSource = this.previewLayout ?? this.tiles.map((t) => ({ id: t.id, position: t.position }));\n const tileById = new Map(this.tiles.map((t) => [t.id, t]));\n\n const gridStyle = this.computeGridStyle();\n\n // ARIA grid hierarchy is grid > row > gridcell. A single role=\"row\"\n // wrapper with display: contents lets us satisfy that without disturbing\n // the CSS Grid placement of the gridcell children.\n return html`\n <div class=\"tile-grid\" role=\"grid\" aria-label=${this.label ?? nothing} style=${gridStyle}>\n <div role=\"row\" style=\"display: contents;\">\n ${layoutSource.map((entry) => {\n const tile = tileById.get(entry.id);\n if (!tile) return nothing;\n return this.renderTile(tile, entry.position);\n })}\n </div>\n </div>\n <div class=\"tile-grid__live-region\" aria-live=\"polite\" aria-atomic=\"true\">${this.liveRegionMessage}</div>\n `;\n }\n\n private renderTile(tile: MintTile, pos: TilePosition): TemplateResult {\n const isDragging = this.gestureKind === 'drag' && this.activeTileId() === tile.id;\n const isResizing = this.gestureKind === 'resize' && this.activeTileId() === tile.id;\n const isBlocked = (isDragging || isResizing) && this.blocked;\n const isPressing = this.gestureKind === 'arming-touch-drag' && this.activeTileId() === tile.id;\n const transform = this.computeActiveTransform(tile.id);\n\n const style = [\n `grid-column: ${pos.colStart} / span ${pos.colSpan}`,\n `grid-row: ${pos.rowStart} / span ${pos.rowSpan}`,\n transform ? `transform: ${transform}` : '',\n ]\n .filter(Boolean)\n .join('; ');\n\n return html`\n <div\n class=\"tile\"\n role=\"gridcell\"\n tabindex=\"0\"\n data-tile-id=${tile.id}\n data-dragging=${isDragging ? 'true' : 'false'}\n data-resizing=${isResizing ? 'true' : 'false'}\n data-blocked=${isBlocked ? 'true' : 'false'}\n data-pressing=${isPressing ? 'true' : 'false'}\n data-drag-mode=${this.dragMode}\n data-locked-move=${tile.disableMove ? 'true' : 'false'}\n data-locked-resize=${tile.disableResize ? 'true' : 'false'}\n aria-label=${tile.label ?? nothing}\n style=${style}\n @pointerdown=${(e: PointerEvent) => this.onTilePointerDown(e, tile)}\n @keydown=${(e: KeyboardEvent) => this.onTileKeyDown(e, tile)}\n >\n <div class=\"tile__header-shell\">\n <slot name=${`${tile.id}-header`}></slot>\n </div>\n <div class=\"tile__content-shell\">\n <slot name=${`${tile.id}-content`}></slot>\n </div>\n ${tile.disableResize || this.resizeMode === 'off'\n ? nothing\n : html`\n <div class=\"tile__resize-side\" data-resize=\"side\"\n @pointerdown=${(e: PointerEvent) => this.onResizeHandlePointerDown(e, tile, 'side')}></div>\n <div class=\"tile__resize-bottom\" data-resize=\"bottom\"\n @pointerdown=${(e: PointerEvent) => this.onResizeHandlePointerDown(e, tile, 'bottom')}></div>\n <div class=\"tile__resize-corner\" data-resize=\"corner\"\n @pointerdown=${(e: PointerEvent) => this.onResizeHandlePointerDown(e, tile, 'corner')}></div>\n `}\n </div>\n `;\n }\n\n private computeGridStyle(): string {\n const tracks =\n this.columnCount && this.columnCount > 0\n ? `repeat(${this.columnCount}, minmax(0, 1fr))`\n : `repeat(auto-fit, minmax(${this.minColumnWidth}, 1fr))`;\n return [\n `grid-template-columns: ${tracks}`,\n `--mp-tile-row-height: ${this.minRowHeight}`,\n `--mp-tile-gap: ${this.gap}`,\n ].join('; ');\n }\n\n /**\n * Refresh the cached layout metrics by reading layout / computed-style state\n * once. Called from firstUpdated, the ResizeObserver tick, and updated()\n * when an input that affects metrics changes — never from render().\n */\n private updateLayoutCache(): void {\n const grid = this.shadowRoot?.querySelector<HTMLElement>('.tile-grid');\n if (!grid) {\n this.effectiveColumnCount =\n this.columnCount && this.columnCount > 0 ? this.columnCount : 1;\n return;\n }\n const cs = getComputedStyle(grid);\n if (this.columnCount && this.columnCount > 0) {\n this.effectiveColumnCount = this.columnCount;\n } else {\n const tracks = cs.gridTemplateColumns.split(/\\s+/).filter(Boolean);\n this.effectiveColumnCount = Math.max(1, tracks.length);\n }\n const rect = grid.getBoundingClientRect();\n const cols = this.effectiveColumnCount;\n const gapX = parseFloat(cs.columnGap) || 0;\n const gapY = parseFloat(cs.rowGap) || 0;\n const width = (rect.width - (cols - 1) * gapX) / cols;\n const height = parseFloat(cs.gridAutoRows) || rect.width / cols;\n this.cellMetrics = { width, height, gapX, gapY };\n }\n\n private computeActiveTransform(id: string): string | null {\n const g = this.gestureState;\n if (g.kind !== 'drag' || g.tileId !== id) return null;\n const pointer = this.lastPointerPosition;\n if (!pointer) return null;\n const grid = this.shadowRoot?.querySelector<HTMLElement>('.tile-grid');\n if (!grid) return null;\n // Cached cellMetrics is stale by at most one frame after a resize — fine\n // for the visual translate. gridRect read here is unavoidable: we need\n // the live grid origin to convert pointer (viewport coords) into\n // grid-relative space. One read per render, not one per tile.\n const gridRect = grid.getBoundingClientRect();\n const cell = this.cellMetrics;\n const snapped = g.currentRect;\n const desiredLeft = pointer.x - gridRect.left - g.pointerOffset.dx;\n const desiredTop = pointer.y - gridRect.top - g.pointerOffset.dy;\n const snappedLeft = (snapped.colStart - 1) * (cell.width + cell.gapX);\n const snappedTop = (snapped.rowStart - 1) * (cell.height + cell.gapY);\n return `translate(${Math.round(desiredLeft - snappedLeft)}px, ${Math.round(desiredTop - snappedTop)}px)`;\n }\n\n // ---------------- Lifecycle ----------------\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'application');\n }\n document.addEventListener('visibilitychange', this.onVisibilityChange);\n }\n\n override disconnectedCallback(): void {\n this.cancelGesture();\n this.detachWindowListeners();\n document.removeEventListener('visibilitychange', this.onVisibilityChange);\n this.hostResizeObserver?.disconnect();\n this.hostResizeObserver = null;\n super.disconnectedCallback();\n }\n\n protected override firstUpdated(): void {\n // Seed the layout cache once the shadow DOM is in place. Subsequent\n // refreshes happen on host resize and on relevant property changes.\n this.updateLayoutCache();\n let scheduled = false;\n this.hostResizeObserver = new ResizeObserver(() => {\n if (scheduled) return;\n scheduled = true;\n // Defer to the next frame so we never write reactive state from inside\n // the observer's callback — that path produces \"ResizeObserver loop\n // completed with undelivered notifications\" warnings.\n requestAnimationFrame(() => {\n scheduled = false;\n this.updateLayoutCache();\n });\n });\n this.hostResizeObserver.observe(this);\n }\n\n override attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n super.attributeChangedCallback(name, oldValue, newValue);\n if (name === 'animate-reflow') {\n this.animateReflow = !(newValue === null || newValue === 'false' || newValue === '0');\n }\n }\n\n // ---------------- FLIP animator ----------------\n\n protected override willUpdate(_changed: PropertyValues): void {\n if (!this.shouldAnimate()) {\n this.flipPreviousRects.clear();\n return;\n }\n const grid = this.shadowRoot?.querySelector<HTMLElement>('.tile-grid');\n if (!grid) return;\n this.flipPreviousRects.clear();\n grid.querySelectorAll<HTMLElement>('.tile').forEach((el) => {\n const id = el.dataset['tileId'];\n if (id) this.flipPreviousRects.set(id, el.getBoundingClientRect());\n });\n }\n\n protected override updated(changed: PropertyValues): void {\n // Refresh cached layout metrics when an input that determines them changes.\n // Reading layout in updated() is safe — the new style is already applied.\n if (\n changed.has('columnCount') ||\n changed.has('minColumnWidth') ||\n changed.has('minRowHeight') ||\n changed.has('gap')\n ) {\n this.updateLayoutCache();\n }\n if (!this.shouldAnimate() || this.flipPreviousRects.size === 0) return;\n const grid = this.shadowRoot?.querySelector<HTMLElement>('.tile-grid');\n if (!grid) return;\n const activeId = this.activeTileId();\n grid.querySelectorAll<HTMLElement>('.tile').forEach((el) => {\n const id = el.dataset['tileId'];\n if (!id || id === activeId) return;\n const prev = this.flipPreviousRects.get(id);\n if (!prev) return;\n const next = el.getBoundingClientRect();\n const dx = prev.left - next.left;\n const dy = prev.top - next.top;\n if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5) return;\n // Invert: jump back to old position with no transition…\n const previous = el.style.transition;\n el.style.transition = 'none';\n el.style.transform = `translate(${dx}px, ${dy}px)`;\n // …then play forward on the next frame, restoring the transition.\n requestAnimationFrame(() => {\n el.style.transition = previous;\n el.style.transform = '';\n });\n });\n this.flipPreviousRects.clear();\n }\n\n private shouldAnimate(): boolean {\n if (!this.animateReflow) return false;\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return false;\n return !window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n }\n\n // ---------------- Pointer entry points ----------------\n\n private lastPointerPosition: { x: number; y: number } | null = null;\n\n private onTilePointerDown(event: PointerEvent, tile: MintTile): void {\n if (event.button !== 0 && event.pointerType === 'mouse') return;\n if (this.gestureState.kind !== 'idle') return;\n if (this.dragMode === 'off' || tile.disableMove) return;\n\n // Resize handles consume their own pointerdown via stopPropagation; if we\n // got here it's a drag-surface candidate.\n if (this.dragMode === 'header' || event.pointerType === 'touch') {\n // Header-only: only proceed if the click originated inside the header\n // shell. The slotted (light-DOM) target won't find shadow-DOM ancestors\n // via closest(), so walk the composed path instead.\n const inHeader = event\n .composedPath()\n .some((node) => node instanceof HTMLElement && node.classList?.contains('tile__header-shell'));\n if (!inHeader) return;\n }\n\n if (event.pointerType === 'touch') {\n this.armTouchDrag(event, tile);\n } else {\n this.armPointerDrag(event, tile);\n }\n }\n\n private onResizeHandlePointerDown(\n event: PointerEvent,\n tile: MintTile,\n mode: 'side' | 'bottom' | 'corner',\n ): void {\n if (event.button !== 0 && event.pointerType === 'mouse') return;\n if (tile.disableResize || this.resizeMode === 'off') return;\n if (this.gestureState.kind !== 'idle') return;\n event.stopPropagation();\n event.preventDefault();\n this.beginResize(event, tile, mode);\n }\n\n // ---------------- Drag arming ----------------\n\n private armPointerDrag(event: PointerEvent, tile: MintTile): void {\n // Mouse / pen: arm immediately past the 5 px threshold. We track the\n // pointer ourselves and convert to a real drag when distance exceeds\n // POINTER_DRAG_THRESHOLD_PX.\n const startX = event.clientX;\n const startY = event.clientY;\n const onMove = (e: PointerEvent) => {\n if (e.pointerId !== event.pointerId) return;\n const dx = e.clientX - startX;\n const dy = e.clientY - startY;\n if (Math.hypot(dx, dy) >= POINTER_DRAG_THRESHOLD_PX) {\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onCancel);\n window.removeEventListener('pointercancel', onCancel);\n this.beginDrag(e, tile);\n }\n };\n const onCancel = (e: PointerEvent) => {\n if (e.pointerId !== event.pointerId) return;\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onCancel);\n window.removeEventListener('pointercancel', onCancel);\n };\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onCancel);\n window.addEventListener('pointercancel', onCancel);\n }\n\n private armTouchDrag(event: PointerEvent, tile: MintTile): void {\n const startX = event.clientX;\n const startY = event.clientY;\n const pointerId = event.pointerId;\n\n const pressingTimer = window.setTimeout(() => {\n // Visual feedback only — gesture not yet armed.\n if (this.gestureState.kind === 'arming-touch-drag' && this.gestureState.pointerId === pointerId) {\n // Force a re-render to flip data-pressing.\n this.requestUpdate();\n }\n }, TOUCH_PRESS_FEEDBACK_DELAY_MS);\n\n const armTimer = window.setTimeout(() => {\n if (this.gestureState.kind !== 'arming-touch-drag' || this.gestureState.pointerId !== pointerId) return;\n this.cleanupTouchArming();\n try {\n navigator.vibrate?.(10);\n } catch {\n // Silently ignore; vibrate isn't available everywhere.\n }\n this.beginDragFromTouchArm(tile, startX, startY, pointerId);\n }, TOUCH_LONG_PRESS_MS);\n\n this.gestureState = {\n kind: 'arming-touch-drag',\n pointerId,\n tileId: tile.id,\n startX,\n startY,\n timer: armTimer,\n pressingTimer,\n };\n this.gestureKind = 'arming-touch-drag';\n\n const onMove = (e: PointerEvent) => {\n if (e.pointerId !== pointerId) return;\n if (this.gestureState.kind !== 'arming-touch-drag') return;\n const dx = e.clientX - startX;\n const dy = e.clientY - startY;\n if (Math.hypot(dx, dy) > TOUCH_LONG_PRESS_SLOP_PX) {\n this.cleanupTouchArming();\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onCancel);\n window.removeEventListener('pointercancel', onCancel);\n }\n };\n const onCancel = (e: PointerEvent) => {\n if (e.pointerId !== pointerId) return;\n if (this.gestureState.kind === 'arming-touch-drag') {\n this.cleanupTouchArming();\n }\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onCancel);\n window.removeEventListener('pointercancel', onCancel);\n };\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onCancel);\n window.addEventListener('pointercancel', onCancel);\n }\n\n private cleanupTouchArming(): void {\n if (this.gestureState.kind !== 'arming-touch-drag') return;\n const { timer, pressingTimer } = this.gestureState;\n if (timer !== null) window.clearTimeout(timer);\n if (pressingTimer !== null) window.clearTimeout(pressingTimer);\n this.gestureState = { kind: 'idle' };\n this.gestureKind = 'idle';\n this.requestUpdate();\n }\n\n private beginDragFromTouchArm(tile: MintTile, startX: number, startY: number, pointerId: number): void {\n // Synthesize the same begin call as for mouse, with a fake pointer event.\n // Refresh the layout cache once at gesture start — guarantees fresh metrics\n // even if the grid has resized since the last cache tick.\n this.updateLayoutCache();\n const grid = this.shadowRoot?.querySelector<HTMLElement>('.tile-grid');\n if (!grid) return;\n const cell = this.cellMetrics;\n const gridRect = grid.getBoundingClientRect();\n const tileLeft = gridRect.left + (tile.position.colStart - 1) * (cell.width + cell.gapX);\n const tileTop = gridRect.top + (tile.position.rowStart - 1) * (cell.height + cell.gapY);\n this.gestureState = {\n kind: 'drag',\n pointerId,\n tileId: tile.id,\n pointerOffset: { dx: startX - tileLeft, dy: startY - tileTop },\n currentRect: { ...tile.position },\n blocked: false,\n };\n this.gestureKind = 'drag';\n this.lastPointerPosition = { x: startX, y: startY };\n this.attachWindowListeners();\n this.requestUpdate();\n }\n\n private beginDrag(event: PointerEvent, tile: MintTile): void {\n this.updateLayoutCache();\n const grid = this.shadowRoot?.querySelector<HTMLElement>('.tile-grid');\n if (!grid) return;\n const cell = this.cellMetrics;\n const gridRect = grid.getBoundingClientRect();\n const tileLeft = gridRect.left + (tile.position.colStart - 1) * (cell.width + cell.gapX);\n const tileTop = gridRect.top + (tile.position.rowStart - 1) * (cell.height + cell.gapY);\n this.gestureState = {\n kind: 'drag',\n pointerId: event.pointerId,\n tileId: tile.id,\n pointerOffset: { dx: event.clientX - tileLeft, dy: event.clientY - tileTop },\n currentRect: { ...tile.position },\n blocked: false,\n };\n this.gestureKind = 'drag';\n this.lastPointerPosition = { x: event.clientX, y: event.clientY };\n this.attachWindowListeners();\n this.runPackerForCurrentGesture();\n }\n\n private beginResize(event: PointerEvent, tile: MintTile, mode: 'side' | 'bottom' | 'corner'): void {\n this.gestureState = {\n kind: 'resize',\n pointerId: event.pointerId,\n tileId: tile.id,\n mode,\n startPointer: { x: event.clientX, y: event.clientY },\n startSpans: { colSpan: tile.position.colSpan, rowSpan: tile.position.rowSpan },\n currentRect: { ...tile.position },\n blocked: false,\n };\n this.gestureKind = 'resize';\n this.lastPointerPosition = { x: event.clientX, y: event.clientY };\n this.attachWindowListeners();\n this.runPackerForCurrentGesture();\n }\n\n private attachWindowListeners(): void {\n window.addEventListener('pointermove', this.onWindowPointerMove);\n window.addEventListener('pointerup', this.onWindowPointerUp);\n window.addEventListener('pointercancel', this.onWindowPointerCancel);\n window.addEventListener('keydown', this.onWindowKeyDown);\n }\n\n private detachWindowListeners(): void {\n window.removeEventListener('pointermove', this.onWindowPointerMove);\n window.removeEventListener('pointerup', this.onWindowPointerUp);\n window.removeEventListener('pointercancel', this.onWindowPointerCancel);\n window.removeEventListener('keydown', this.onWindowKeyDown);\n }\n\n private handleEscapeKey(e: KeyboardEvent): void {\n if (e.key === 'Escape' && this.gestureState.kind !== 'idle') {\n e.preventDefault();\n this.cancelGesture();\n }\n }\n\n // ---------------- Pointer move / up / cancel ----------------\n\n private handlePointerMove(event: PointerEvent): void {\n const g = this.gestureState;\n if (g.kind === 'idle' || g.kind === 'arming-touch-drag') return;\n if (event.pointerId !== g.pointerId) return;\n this.lastPointerPosition = { x: event.clientX, y: event.clientY };\n this.runPackerForCurrentGesture();\n }\n\n private handlePointerUp(event: PointerEvent): void {\n const g = this.gestureState;\n if (g.kind === 'idle' || g.kind === 'arming-touch-drag') return;\n if (event.pointerId !== g.pointerId) return;\n if (g.blocked) {\n this.cancelGesture('blocked');\n return;\n }\n this.commitGesture();\n }\n\n private handlePointerCancel(event: PointerEvent): void {\n const g = this.gestureState;\n if (g.kind === 'idle') return;\n if (g.kind !== 'arming-touch-drag' && event.pointerId !== g.pointerId) return;\n this.cancelGesture();\n }\n\n // ---------------- Packer integration ----------------\n\n private runPackerForCurrentGesture(): void {\n const g = this.gestureState;\n if (g.kind !== 'drag' && g.kind !== 'resize') return;\n const tile = this.tiles.find((t) => t.id === g.tileId);\n if (!tile) {\n this.cancelGesture();\n return;\n }\n const rect = g.kind === 'drag' ? this.computeDragRect(g, tile) : this.computeResizeRect(g, tile);\n if (!rect) return;\n g.currentRect = rect;\n\n const cols = this.effectiveColumnCount;\n const result = pack(\n this.tiles.map((t) => ({ id: t.id, position: t.position, locked: t.disableMove })),\n { id: tile.id, rect },\n cols,\n );\n this.previewLayout = result.layout;\n g.blocked = result.blocked;\n this.blocked = result.blocked;\n this.requestUpdate();\n }\n\n private computeDragRect(g: Extract<GestureState, { kind: 'drag' }>, tile: MintTile): GridRect | null {\n const grid = this.shadowRoot?.querySelector<HTMLElement>('.tile-grid');\n if (!grid) return null;\n const cell = this.cellMetrics;\n const cols = this.effectiveColumnCount;\n const pointer = this.lastPointerPosition;\n if (!pointer) return null;\n const gridRect = grid.getBoundingClientRect();\n // Pointer position relative to grid origin, minus the where-on-the-tile offset.\n const localX = pointer.x - gridRect.left - g.pointerOffset.dx;\n const localY = pointer.y - gridRect.top - g.pointerOffset.dy;\n const colStart = Math.round(localX / (cell.width + cell.gapX)) + 1;\n const rowStart = Math.round(localY / (cell.height + cell.gapY)) + 1;\n return {\n colStart: Math.max(1, Math.min(colStart, cols - tile.position.colSpan + 1)),\n rowStart: Math.max(1, rowStart),\n colSpan: tile.position.colSpan,\n rowSpan: tile.position.rowSpan,\n };\n }\n\n private computeResizeRect(\n g: Extract<GestureState, { kind: 'resize' }>,\n tile: MintTile,\n ): GridRect | null {\n const cell = this.cellMetrics;\n const cols = this.effectiveColumnCount;\n const pointer = this.lastPointerPosition;\n if (!pointer) return null;\n const dx = pointer.x - g.startPointer.x;\n const dy = pointer.y - g.startPointer.y;\n const colDelta = Math.round(dx / (cell.width + cell.gapX));\n const rowDelta = Math.round(dy / (cell.height + cell.gapY));\n const colSpan =\n g.mode === 'bottom'\n ? g.startSpans.colSpan\n : Math.max(1, Math.min(g.startSpans.colSpan + colDelta, cols - tile.position.colStart + 1));\n const rowSpan =\n g.mode === 'side' ? g.startSpans.rowSpan : Math.max(1, g.startSpans.rowSpan + rowDelta);\n return {\n colStart: tile.position.colStart,\n rowStart: tile.position.rowStart,\n colSpan,\n rowSpan,\n };\n }\n\n // ---------------- Commit / cancel ----------------\n\n private commitGesture(): void {\n const g = this.gestureState;\n if (g.kind !== 'drag' && g.kind !== 'resize') return;\n const finalLayout = this.previewLayout;\n if (!finalLayout) {\n this.cleanupGesture();\n return;\n }\n\n const previousById = new Map(this.tiles.map((t) => [t.id, t.position]));\n const newTiles: MintTile[] = this.tiles.map((t) => {\n const placed = finalLayout.find((p) => p.id === t.id);\n return placed ? { ...t, position: placed.position } : t;\n });\n\n this.tiles = newTiles;\n\n // Dispatch per-tile change events.\n finalLayout.forEach((entry) => {\n const prev = previousById.get(entry.id);\n if (!prev || !this.positionsEqual(prev, entry.position)) {\n this.dispatchEvent(\n new CustomEvent<{ id: string; position: TilePosition }>('tilepositionchange', {\n detail: { id: entry.id, position: entry.position },\n bubbles: false,\n composed: true,\n }),\n );\n }\n });\n this.dispatchEvent(\n new CustomEvent<TileLayoutSnapshot>('tilelayoutchange', {\n detail: this.cloneSnapshot(finalLayout),\n bubbles: false,\n composed: true,\n }),\n );\n\n const movedTile = finalLayout.find((p) => p.id === g.tileId);\n if (movedTile) {\n this.liveRegionMessage =\n g.kind === 'drag'\n ? `Tile moved to row ${movedTile.position.rowStart}, column ${movedTile.position.colStart}`\n : `Tile resized to ${movedTile.position.colSpan} columns by ${movedTile.position.rowSpan} rows`;\n }\n\n this.cleanupGesture();\n }\n\n private cancelGesture(reason: 'cancel' | 'blocked' = 'cancel'): void {\n const g = this.gestureState;\n if (reason === 'blocked' && (g.kind === 'drag' || g.kind === 'resize')) {\n this.dispatchEvent(\n new CustomEvent<TileGestureBlocked>('tilegestureblocked', {\n detail: { id: g.tileId, reason: 'locked-overlap' },\n bubbles: false,\n composed: true,\n }),\n );\n }\n this.cleanupGesture();\n }\n\n private cleanupGesture(): void {\n if (this.gestureState.kind === 'arming-touch-drag') this.cleanupTouchArming();\n this.detachWindowListeners();\n this.gestureState = { kind: 'idle' };\n this.gestureKind = 'idle';\n this.previewLayout = null;\n this.blocked = false;\n this.lastPointerPosition = null;\n this.requestUpdate();\n }\n\n private positionsEqual(a: TilePosition, b: TilePosition): boolean {\n return (\n a.colStart === b.colStart &&\n a.rowStart === b.rowStart &&\n a.colSpan === b.colSpan &&\n a.rowSpan === b.rowSpan\n );\n }\n\n private cloneSnapshot(s: TileLayoutSnapshot): TileLayoutSnapshot {\n return s.map((p) => ({ id: p.id, position: { ...p.position } }));\n }\n\n private activeTileId(): string | null {\n const g = this.gestureState;\n if (g.kind === 'drag' || g.kind === 'resize' || g.kind === 'arming-touch-drag') return g.tileId;\n return null;\n }\n\n // ---------------- Public API ----------------\n\n /** Read-only snapshot of the current layout. Mirrors `BsDockManagerComponent.captureLayout()`. */\n captureLayout(): TileLayoutSnapshot {\n return this.tiles.map((t) => ({ id: t.id, position: { ...t.position } }));\n }\n\n /**\n * True while a drag or resize is in flight. The Angular wrapper uses this to\n * avoid clobbering `tiles` mid-gesture. Touch long-press arming does NOT\n * count — the WC isn't yet owning the layout during the hold.\n */\n get isGestureActive(): boolean {\n return this.gestureState.kind === 'drag' || this.gestureState.kind === 'resize';\n }\n\n // ---------------- Keyboard ----------------\n\n private onTileKeyDown(event: KeyboardEvent, tile: MintTile): void {\n if (tile.disableMove && tile.disableResize) return;\n const km = this.keyboardState;\n\n if (km.kind === 'idle') {\n if (event.key === ' ' && !tile.disableMove) {\n event.preventDefault();\n this.keyboardState = { kind: 'move', tileId: tile.id };\n this.liveRegionMessage = 'Move mode enabled. Use arrow keys to move; Enter to commit, Escape to cancel.';\n return;\n }\n return;\n }\n\n if (km.tileId !== tile.id) return;\n\n if (event.key === 'Escape' || event.key === 'Enter') {\n event.preventDefault();\n this.keyboardState = { kind: 'idle' };\n this.liveRegionMessage = event.key === 'Enter' ? 'Move committed.' : 'Move cancelled.';\n return;\n }\n\n if (event.key.startsWith('Arrow')) {\n event.preventDefault();\n const isResize = event.shiftKey;\n this.applyKeyboardStep(tile, event.key as ArrowKey, isResize);\n }\n }\n\n private applyKeyboardStep(tile: MintTile, key: ArrowKey, isResize: boolean): void {\n const cols = this.effectiveColumnCount;\n const dx = key === 'ArrowLeft' ? -1 : key === 'ArrowRight' ? 1 : 0;\n const dy = key === 'ArrowUp' ? -1 : key === 'ArrowDown' ? 1 : 0;\n const newRect: GridRect = isResize\n ? {\n colStart: tile.position.colStart,\n rowStart: tile.position.rowStart,\n colSpan: Math.max(1, Math.min(tile.position.colSpan + dx, cols - tile.position.colStart + 1)),\n rowSpan: Math.max(1, tile.position.rowSpan + dy),\n }\n : {\n colStart: Math.max(1, Math.min(tile.position.colStart + dx, cols - tile.position.colSpan + 1)),\n rowStart: Math.max(1, tile.position.rowStart + dy),\n colSpan: tile.position.colSpan,\n rowSpan: tile.position.rowSpan,\n };\n\n const result = pack(\n this.tiles.map((t) => ({ id: t.id, position: t.position, locked: t.disableMove })),\n { id: tile.id, rect: newRect },\n cols,\n );\n if (result.blocked) {\n this.liveRegionMessage = 'Move blocked.';\n return;\n }\n const newTiles: MintTile[] = this.tiles.map((t) => {\n const placed = result.layout.find((p) => p.id === t.id);\n return placed ? { ...t, position: placed.position } : t;\n });\n this.tiles = newTiles;\n this.dispatchEvent(\n new CustomEvent<TileLayoutSnapshot>('tilelayoutchange', {\n detail: this.cloneSnapshot(result.layout),\n bubbles: false,\n composed: true,\n }),\n );\n result.layout.forEach((entry) => {\n this.dispatchEvent(\n new CustomEvent<{ id: string; position: TilePosition }>('tilepositionchange', {\n detail: { id: entry.id, position: entry.position },\n bubbles: false,\n composed: true,\n }),\n );\n });\n this.liveRegionMessage = isResize\n ? `Tile resized to ${newRect.colSpan} columns by ${newRect.rowSpan} rows`\n : `Tile moved to row ${newRect.rowStart}, column ${newRect.colStart}`;\n }\n}\n\ntype ArrowKey = 'ArrowUp' | 'ArrowDown' | 'ArrowLeft' | 'ArrowRight';\n\nif (typeof customElements !== 'undefined' && !customElements.get('mp-tile-manager')) {\n customElements.define('mp-tile-manager', MintTileManagerElement);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'mp-tile-manager': MintTileManagerElement;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mintplayer/ng-bootstrap",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "21.
|
|
4
|
+
"version": "21.30.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/MintPlayer/mintplayer-ng-bootstrap",
|
|
@@ -184,6 +184,10 @@
|
|
|
184
184
|
"types": "./types/mintplayer-ng-bootstrap-modal.d.ts",
|
|
185
185
|
"default": "./fesm2022/mintplayer-ng-bootstrap-modal.mjs"
|
|
186
186
|
},
|
|
187
|
+
"./multi-range": {
|
|
188
|
+
"types": "./types/mintplayer-ng-bootstrap-multi-range.d.ts",
|
|
189
|
+
"default": "./fesm2022/mintplayer-ng-bootstrap-multi-range.mjs"
|
|
190
|
+
},
|
|
187
191
|
"./multiselect": {
|
|
188
192
|
"types": "./types/mintplayer-ng-bootstrap-multiselect.d.ts",
|
|
189
193
|
"default": "./fesm2022/mintplayer-ng-bootstrap-multiselect.mjs"
|
|
@@ -304,6 +308,10 @@
|
|
|
304
308
|
"types": "./types/mintplayer-ng-bootstrap-table.d.ts",
|
|
305
309
|
"default": "./fesm2022/mintplayer-ng-bootstrap-table.mjs"
|
|
306
310
|
},
|
|
311
|
+
"./tile-manager": {
|
|
312
|
+
"types": "./types/mintplayer-ng-bootstrap-tile-manager.d.ts",
|
|
313
|
+
"default": "./fesm2022/mintplayer-ng-bootstrap-tile-manager.mjs"
|
|
314
|
+
},
|
|
307
315
|
"./timepicker": {
|
|
308
316
|
"types": "./types/mintplayer-ng-bootstrap-timepicker.d.ts",
|
|
309
317
|
"default": "./fesm2022/mintplayer-ng-bootstrap-timepicker.mjs"
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ElementRef } from '@angular/core';
|
|
3
|
+
import * as lit from 'lit';
|
|
4
|
+
import { LitElement, TemplateResult } from 'lit';
|
|
5
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
6
|
+
|
|
7
|
+
type MultiRangeOrientation = 'horizontal' | 'vertical';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Bootstrap-flavoured multi-thumb range slider.
|
|
11
|
+
*
|
|
12
|
+
* Block-crossing: thumbs cannot pass their neighbours. Identity is by index —
|
|
13
|
+
* value[0] is always the lowest thumb. The value setter normalises input by
|
|
14
|
+
* sorting ascending and clamping each entry to [min, max]; minDistance is
|
|
15
|
+
* enforced only at user-interaction entry points (pointer + keyboard), not on
|
|
16
|
+
* programmatic writes — callers' arrays are preserved verbatim within bounds.
|
|
17
|
+
*
|
|
18
|
+
* Events:
|
|
19
|
+
* - `value-input` fires continuously during drag and on every keyboard step.
|
|
20
|
+
* - `value-change` fires on commit (pointerup) and after every keyboard step.
|
|
21
|
+
*
|
|
22
|
+
* Both bubble and compose so the Angular wrapper's host listeners pick them up.
|
|
23
|
+
*/
|
|
24
|
+
declare class MintMultiRangeElement extends LitElement {
|
|
25
|
+
static styles: lit.CSSResult[];
|
|
26
|
+
static get observedAttributes(): string[];
|
|
27
|
+
static properties: {
|
|
28
|
+
value: {
|
|
29
|
+
attribute: boolean;
|
|
30
|
+
};
|
|
31
|
+
min: {
|
|
32
|
+
attribute: string;
|
|
33
|
+
type: NumberConstructor;
|
|
34
|
+
reflect: boolean;
|
|
35
|
+
};
|
|
36
|
+
max: {
|
|
37
|
+
attribute: string;
|
|
38
|
+
type: NumberConstructor;
|
|
39
|
+
reflect: boolean;
|
|
40
|
+
};
|
|
41
|
+
step: {
|
|
42
|
+
attribute: string;
|
|
43
|
+
type: NumberConstructor;
|
|
44
|
+
reflect: boolean;
|
|
45
|
+
};
|
|
46
|
+
minDistance: {
|
|
47
|
+
attribute: string;
|
|
48
|
+
type: NumberConstructor;
|
|
49
|
+
};
|
|
50
|
+
orientation: {
|
|
51
|
+
attribute: string;
|
|
52
|
+
type: StringConstructor;
|
|
53
|
+
reflect: boolean;
|
|
54
|
+
};
|
|
55
|
+
disabled: {
|
|
56
|
+
attribute: string;
|
|
57
|
+
type: BooleanConstructor;
|
|
58
|
+
reflect: boolean;
|
|
59
|
+
};
|
|
60
|
+
formatValue: {
|
|
61
|
+
attribute: boolean;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
min: number;
|
|
65
|
+
max: number;
|
|
66
|
+
step: number;
|
|
67
|
+
minDistance: number;
|
|
68
|
+
orientation: MultiRangeOrientation;
|
|
69
|
+
disabled: boolean;
|
|
70
|
+
formatValue: ((value: number) => string) | null;
|
|
71
|
+
private _value;
|
|
72
|
+
private dragState;
|
|
73
|
+
private trackEl;
|
|
74
|
+
private rtlDuringGesture;
|
|
75
|
+
connectedCallback(): void;
|
|
76
|
+
protected firstUpdated(): void;
|
|
77
|
+
get value(): number[];
|
|
78
|
+
set value(next: number[] | null | undefined);
|
|
79
|
+
private arraysEqual;
|
|
80
|
+
private normalise;
|
|
81
|
+
private clampToBounds;
|
|
82
|
+
private snapToStep;
|
|
83
|
+
private percent;
|
|
84
|
+
private formatThumb;
|
|
85
|
+
private isVertical;
|
|
86
|
+
/**
|
|
87
|
+
* Returns whether the host renders in RTL. Uses the cached value if a gesture
|
|
88
|
+
* is active (set in startDrag / onTrackPointerDown), otherwise reads
|
|
89
|
+
* getComputedStyle fresh — direction can come from any ancestor's `dir`,
|
|
90
|
+
* so document.dir or our own attribute aren't sufficient.
|
|
91
|
+
*/
|
|
92
|
+
private isRtl;
|
|
93
|
+
/**
|
|
94
|
+
* Apply the Block + minDistance constraint to a candidate value for thumb i.
|
|
95
|
+
* Returns the candidate clamped between its (already-respected) neighbours.
|
|
96
|
+
*/
|
|
97
|
+
private constrainThumb;
|
|
98
|
+
/** Map a pointer coordinate inside the track rect to a value in [min, max]. */
|
|
99
|
+
private valueFromPointer;
|
|
100
|
+
/** Update one thumb in-place; emit `value-input`. Returns true if value changed. */
|
|
101
|
+
private moveThumb;
|
|
102
|
+
private dispatchValueChange;
|
|
103
|
+
private startDrag;
|
|
104
|
+
private onThumbPointerDown;
|
|
105
|
+
private onTrackPointerDown;
|
|
106
|
+
/**
|
|
107
|
+
* Returns the index of the thumb closest to `target`. Ties (multiple thumbs
|
|
108
|
+
* stacked at the same value) are broken by direction: clicks to the right of
|
|
109
|
+
* the stack pick the highest-index thumb, clicks to the left pick the
|
|
110
|
+
* lowest. Without this, a stack would always select the lowest-index thumb,
|
|
111
|
+
* which is blocked by its higher-indexed neighbours and can't move toward
|
|
112
|
+
* the click — the user would see no response.
|
|
113
|
+
*/
|
|
114
|
+
private nearestThumbIndex;
|
|
115
|
+
private onPointerMove;
|
|
116
|
+
private onPointerUp;
|
|
117
|
+
private onThumbKeyDown;
|
|
118
|
+
/** Return the target value for a key press, or null if the key isn't bound. */
|
|
119
|
+
private keyboardTarget;
|
|
120
|
+
protected render(): TemplateResult;
|
|
121
|
+
private renderFill;
|
|
122
|
+
private renderThumb;
|
|
123
|
+
/** Returns a copy of the current values. */
|
|
124
|
+
getValues(): number[];
|
|
125
|
+
}
|
|
126
|
+
declare global {
|
|
127
|
+
interface HTMLElementTagNameMap {
|
|
128
|
+
'mp-multi-range': MintMultiRangeElement;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
declare class BsMultiRangeValueAccessor implements ControlValueAccessor {
|
|
133
|
+
private host;
|
|
134
|
+
private onValueChange?;
|
|
135
|
+
private onTouched?;
|
|
136
|
+
protected onInputEvent(ev: Event): void;
|
|
137
|
+
protected onTouchEvent(): void;
|
|
138
|
+
registerOnChange(fn: (value: number[]) => void): void;
|
|
139
|
+
registerOnTouched(fn: () => void): void;
|
|
140
|
+
writeValue(value: number[] | null | undefined): void;
|
|
141
|
+
setDisabledState(isDisabled: boolean): void;
|
|
142
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsMultiRangeValueAccessor, never>;
|
|
143
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BsMultiRangeValueAccessor, "bs-multi-range", never, {}, {}, never, never, true, never>;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
declare class BsMultiRangeComponent {
|
|
147
|
+
readonly min: _angular_core.InputSignal<number>;
|
|
148
|
+
readonly max: _angular_core.InputSignal<number>;
|
|
149
|
+
readonly step: _angular_core.InputSignal<number>;
|
|
150
|
+
readonly minDistance: _angular_core.InputSignal<number>;
|
|
151
|
+
readonly orientation: _angular_core.InputSignal<MultiRangeOrientation>;
|
|
152
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
153
|
+
readonly formatValue: _angular_core.InputSignal<((value: number) => string) | null>;
|
|
154
|
+
readonly label: _angular_core.InputSignal<string | null>;
|
|
155
|
+
readonly value: _angular_core.ModelSignal<number[] | undefined>;
|
|
156
|
+
readonly valueChange: _angular_core.OutputEmitterRef<number[]>;
|
|
157
|
+
readonly valueInput: _angular_core.OutputEmitterRef<number[]>;
|
|
158
|
+
readonly elementRef: _angular_core.Signal<ElementRef<MintMultiRangeElement>>;
|
|
159
|
+
protected readonly disabledAttr: _angular_core.Signal<"" | null>;
|
|
160
|
+
constructor();
|
|
161
|
+
protected onValueInput(event: Event): void;
|
|
162
|
+
protected onValueChange(event: Event): void;
|
|
163
|
+
/** Imperatively read the currently-rendered values from the WC. */
|
|
164
|
+
getValues(): number[];
|
|
165
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsMultiRangeComponent, never>;
|
|
166
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BsMultiRangeComponent, "bs-multi-range", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "minDistance": { "alias": "minDistance"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "formatValue": { "alias": "formatValue"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "valueChange": "valueChange"; "valueInput": "valueInput"; }, never, never, true, [{ directive: typeof BsMultiRangeValueAccessor; inputs: {}; outputs: {}; }]>;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export { BsMultiRangeComponent, BsMultiRangeValueAccessor, MintMultiRangeElement };
|
|
170
|
+
export type { MultiRangeOrientation };
|