igniteui-webcomponents 7.3.0-beta.1 → 7.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +30 -0
  3. package/components/avatar/avatar.d.ts +1 -2
  4. package/components/avatar/avatar.js +4 -8
  5. package/components/avatar/avatar.js.map +1 -1
  6. package/components/badge/badge.d.ts +6 -1
  7. package/components/badge/badge.js +8 -5
  8. package/components/badge/badge.js.map +1 -1
  9. package/components/badge/themes/badge.base.css.js +1 -1
  10. package/components/badge/themes/badge.base.css.js.map +1 -1
  11. package/components/chip/chip.d.ts +30 -14
  12. package/components/chip/chip.js +54 -48
  13. package/components/chip/chip.js.map +1 -1
  14. package/components/chip/themes/chip.base.css.js +1 -1
  15. package/components/chip/themes/chip.base.css.js.map +1 -1
  16. package/components/chip/themes/dark/chip.bootstrap.css.js +1 -1
  17. package/components/chip/themes/dark/chip.bootstrap.css.js.map +1 -1
  18. package/components/chip/themes/dark/chip.fluent.css.js +1 -1
  19. package/components/chip/themes/dark/chip.fluent.css.js.map +1 -1
  20. package/components/chip/themes/dark/chip.indigo.css.js +1 -1
  21. package/components/chip/themes/dark/chip.indigo.css.js.map +1 -1
  22. package/components/chip/themes/dark/chip.material.css.js +1 -1
  23. package/components/chip/themes/dark/chip.material.css.js.map +1 -1
  24. package/components/chip/themes/light/chip.bootstrap.css.js +1 -1
  25. package/components/chip/themes/light/chip.bootstrap.css.js.map +1 -1
  26. package/components/chip/themes/light/chip.fluent.css.js +1 -1
  27. package/components/chip/themes/light/chip.fluent.css.js.map +1 -1
  28. package/components/chip/themes/light/chip.indigo.css.js +1 -1
  29. package/components/chip/themes/light/chip.indigo.css.js.map +1 -1
  30. package/components/chip/themes/light/chip.material.css.js +1 -1
  31. package/components/chip/themes/light/chip.material.css.js.map +1 -1
  32. package/components/chip/themes/shared/chip.bootstrap.css.js +1 -1
  33. package/components/chip/themes/shared/chip.bootstrap.css.js.map +1 -1
  34. package/components/chip/themes/shared/chip.common.css.js +1 -1
  35. package/components/chip/themes/shared/chip.common.css.js.map +1 -1
  36. package/components/chip/themes/shared/chip.fluent.css.js +1 -1
  37. package/components/chip/themes/shared/chip.fluent.css.js.map +1 -1
  38. package/components/chip/themes/shared/chip.indigo.css.js +1 -1
  39. package/components/chip/themes/shared/chip.indigo.css.js.map +1 -1
  40. package/components/color-picker/color-picker.d.ts +261 -0
  41. package/components/color-picker/color-picker.js +620 -0
  42. package/components/color-picker/color-picker.js.map +1 -0
  43. package/components/color-picker/common.d.ts +37 -0
  44. package/components/color-picker/common.js +55 -0
  45. package/components/color-picker/common.js.map +1 -0
  46. package/components/color-picker/converters.d.ts +18 -0
  47. package/components/color-picker/converters.js +173 -0
  48. package/components/color-picker/converters.js.map +1 -0
  49. package/components/color-picker/model.d.ts +120 -0
  50. package/components/color-picker/model.js +174 -0
  51. package/components/color-picker/model.js.map +1 -0
  52. package/components/color-picker/picker-canvas.d.ts +95 -0
  53. package/components/color-picker/picker-canvas.js +155 -0
  54. package/components/color-picker/picker-canvas.js.map +1 -0
  55. package/components/color-picker/themes/color-picker.base.css.js +3 -0
  56. package/components/color-picker/themes/color-picker.base.css.js.map +1 -0
  57. package/components/color-picker/themes/dark/color-picker.bootstrap.css.js +3 -0
  58. package/components/color-picker/themes/dark/color-picker.bootstrap.css.js.map +1 -0
  59. package/components/color-picker/themes/dark/color-picker.fluent.css.js +3 -0
  60. package/components/color-picker/themes/dark/color-picker.fluent.css.js.map +1 -0
  61. package/components/color-picker/themes/dark/color-picker.indigo.css.js +3 -0
  62. package/components/color-picker/themes/dark/color-picker.indigo.css.js.map +1 -0
  63. package/components/color-picker/themes/dark/color-picker.material.css.js +3 -0
  64. package/components/color-picker/themes/dark/color-picker.material.css.js.map +1 -0
  65. package/components/color-picker/themes/light/color-picker.bootstrap.css.js +3 -0
  66. package/components/color-picker/themes/light/color-picker.bootstrap.css.js.map +1 -0
  67. package/components/color-picker/themes/light/color-picker.fluent.css.js +3 -0
  68. package/components/color-picker/themes/light/color-picker.fluent.css.js.map +1 -0
  69. package/components/color-picker/themes/light/color-picker.indigo.css.js +3 -0
  70. package/components/color-picker/themes/light/color-picker.indigo.css.js.map +1 -0
  71. package/components/color-picker/themes/light/color-picker.material.css.js +3 -0
  72. package/components/color-picker/themes/light/color-picker.material.css.js.map +1 -0
  73. package/components/color-picker/themes/light/color-picker.shared.css.js +3 -0
  74. package/components/color-picker/themes/light/color-picker.shared.css.js.map +1 -0
  75. package/components/{resize-container/themes/resize-container.base.css.js → color-picker/themes/picker-canvas.base.css.js} +2 -2
  76. package/components/color-picker/themes/picker-canvas.base.css.js.map +1 -0
  77. package/components/color-picker/themes/shared/color-picker.bootstrap.css.js +3 -0
  78. package/components/color-picker/themes/shared/color-picker.bootstrap.css.js.map +1 -0
  79. package/components/color-picker/themes/shared/color-picker.common.css.d.ts +1 -0
  80. package/components/color-picker/themes/shared/color-picker.common.css.js +3 -0
  81. package/components/color-picker/themes/shared/color-picker.common.css.js.map +1 -0
  82. package/components/color-picker/themes/shared/color-picker.fluent.css.d.ts +1 -0
  83. package/components/color-picker/themes/shared/color-picker.fluent.css.js +3 -0
  84. package/components/color-picker/themes/shared/color-picker.fluent.css.js.map +1 -0
  85. package/components/color-picker/themes/shared/color-picker.indigo.css.d.ts +1 -0
  86. package/components/color-picker/themes/shared/color-picker.indigo.css.js +3 -0
  87. package/components/color-picker/themes/shared/color-picker.indigo.css.js.map +1 -0
  88. package/components/color-picker/themes/shared/color-picker.material.css.d.ts +1 -0
  89. package/components/color-picker/themes/shared/color-picker.material.css.js +3 -0
  90. package/components/color-picker/themes/shared/color-picker.material.css.js.map +1 -0
  91. package/components/color-picker/themes/themes.js +50 -0
  92. package/components/color-picker/themes/themes.js.map +1 -0
  93. package/components/color-picker/validators.d.ts +3 -0
  94. package/components/color-picker/validators.js +5 -0
  95. package/components/color-picker/validators.js.map +1 -0
  96. package/components/date-picker/date-picker.base.d.ts +1 -1
  97. package/components/icon/icon-references.js +1 -0
  98. package/components/icon/icon-references.js.map +1 -1
  99. package/components/icon/internal-icons-lib.js +3 -0
  100. package/components/icon/internal-icons-lib.js.map +1 -1
  101. package/components/input/themes/shared/input.material.css.js +1 -1
  102. package/components/input/themes/shared/input.material.css.js.map +1 -1
  103. package/components/textarea/textarea.d.ts +2 -15
  104. package/components/textarea/textarea.js +48 -93
  105. package/components/textarea/textarea.js.map +1 -1
  106. package/components/tile-manager/position.d.ts +2 -9
  107. package/components/tile-manager/position.js +27 -42
  108. package/components/tile-manager/position.js.map +1 -1
  109. package/components/tile-manager/resize-state.d.ts +11 -22
  110. package/components/tile-manager/resize-state.js +60 -119
  111. package/components/tile-manager/resize-state.js.map +1 -1
  112. package/components/tile-manager/resize-util.d.ts +3 -7
  113. package/components/tile-manager/resize-util.js +65 -72
  114. package/components/tile-manager/resize-util.js.map +1 -1
  115. package/components/tile-manager/serializer.d.ts +1 -1
  116. package/components/tile-manager/serializer.js +9 -10
  117. package/components/tile-manager/serializer.js.map +1 -1
  118. package/components/tile-manager/themes/shared/tile/tile.common.css.js +1 -1
  119. package/components/tile-manager/themes/shared/tile/tile.common.css.js.map +1 -1
  120. package/components/tile-manager/themes/tile.base.css.js +1 -1
  121. package/components/tile-manager/themes/tile.base.css.js.map +1 -1
  122. package/components/tile-manager/tile-ghost-util.js +16 -20
  123. package/components/tile-manager/tile-ghost-util.js.map +1 -1
  124. package/components/tile-manager/tile-manager.d.ts +5 -2
  125. package/components/tile-manager/tile-manager.js +27 -23
  126. package/components/tile-manager/tile-manager.js.map +1 -1
  127. package/components/tile-manager/tile.d.ts +32 -18
  128. package/components/tile-manager/tile.js +181 -161
  129. package/components/tile-manager/tile.js.map +1 -1
  130. package/components/tile-manager/types.d.ts +1 -5
  131. package/components/tile-manager/types.js.map +1 -1
  132. package/components/types.d.ts +2 -0
  133. package/components/types.js.map +1 -1
  134. package/custom-elements.json +25375 -22692
  135. package/igniteui-webcomponents.css-data.json +1 -1
  136. package/igniteui-webcomponents.html-data.json +1 -1
  137. package/index.d.ts +2 -0
  138. package/index.js +1 -0
  139. package/index.js.map +1 -1
  140. package/internals/definitions/defineAllComponents.js +2 -0
  141. package/internals/definitions/defineAllComponents.js.map +1 -1
  142. package/internals/directives/drag.d.ts +144 -0
  143. package/internals/directives/drag.js +278 -0
  144. package/internals/directives/drag.js.map +1 -0
  145. package/internals/directives/resize.d.ts +109 -0
  146. package/internals/directives/resize.js +214 -0
  147. package/internals/directives/resize.js.map +1 -0
  148. package/internals/templates/input-shell.d.ts +12 -1
  149. package/internals/templates/input-shell.js +17 -10
  150. package/internals/templates/input-shell.js.map +1 -1
  151. package/internals/utils/dom.d.ts +2 -0
  152. package/internals/utils/dom.js +3 -0
  153. package/internals/utils/dom.js.map +1 -1
  154. package/internals/utils/events.d.ts +2 -0
  155. package/internals/utils/events.js +3 -0
  156. package/internals/utils/events.js.map +1 -1
  157. package/package.json +3 -1
  158. package/skills/README.md +1 -0
  159. package/web-types.json +2 -2
  160. package/components/resize-container/default-ghost.d.ts +0 -5
  161. package/components/resize-container/default-ghost.js +0 -20
  162. package/components/resize-container/default-ghost.js.map +0 -1
  163. package/components/resize-container/resize-container.d.ts +0 -60
  164. package/components/resize-container/resize-container.js +0 -156
  165. package/components/resize-container/resize-container.js.map +0 -1
  166. package/components/resize-container/resize-controller.d.ts +0 -46
  167. package/components/resize-container/resize-controller.js +0 -195
  168. package/components/resize-container/resize-controller.js.map +0 -1
  169. package/components/resize-container/themes/dark/resize-indicator.bootstrap.css.js +0 -3
  170. package/components/resize-container/themes/dark/resize-indicator.bootstrap.css.js.map +0 -1
  171. package/components/resize-container/themes/dark/resize-indicator.fluent.css.js +0 -3
  172. package/components/resize-container/themes/dark/resize-indicator.fluent.css.js.map +0 -1
  173. package/components/resize-container/themes/dark/resize-indicator.indigo.css.js +0 -3
  174. package/components/resize-container/themes/dark/resize-indicator.indigo.css.js.map +0 -1
  175. package/components/resize-container/themes/dark/resize-indicator.material.css.js +0 -3
  176. package/components/resize-container/themes/dark/resize-indicator.material.css.js.map +0 -1
  177. package/components/resize-container/themes/dark/resize-indicator.shared.css.js +0 -3
  178. package/components/resize-container/themes/dark/resize-indicator.shared.css.js.map +0 -1
  179. package/components/resize-container/themes/light/resize-indicator.bootstrap.css.js +0 -3
  180. package/components/resize-container/themes/light/resize-indicator.bootstrap.css.js.map +0 -1
  181. package/components/resize-container/themes/light/resize-indicator.fluent.css.js +0 -3
  182. package/components/resize-container/themes/light/resize-indicator.fluent.css.js.map +0 -1
  183. package/components/resize-container/themes/light/resize-indicator.indigo.css.js +0 -3
  184. package/components/resize-container/themes/light/resize-indicator.indigo.css.js.map +0 -1
  185. package/components/resize-container/themes/light/resize-indicator.material.css.js +0 -3
  186. package/components/resize-container/themes/light/resize-indicator.material.css.js.map +0 -1
  187. package/components/resize-container/themes/light/resize-indicator.shared.css.js +0 -3
  188. package/components/resize-container/themes/light/resize-indicator.shared.css.js.map +0 -1
  189. package/components/resize-container/themes/resize-container.base.css.js.map +0 -1
  190. package/components/resize-container/themes/shared/resize-container.common.css.js +0 -3
  191. package/components/resize-container/themes/shared/resize-container.common.css.js.map +0 -1
  192. package/components/resize-container/themes/themes.js +0 -47
  193. package/components/resize-container/themes/themes.js.map +0 -1
  194. package/components/resize-container/types.d.ts +0 -40
  195. package/components/resize-container/types.js +0 -2
  196. package/components/resize-container/types.js.map +0 -1
  197. package/internals/controllers/drag.d.ts +0 -166
  198. package/internals/controllers/drag.js +0 -283
  199. package/internals/controllers/drag.js.map +0 -1
  200. /package/components/{resize-container/themes/dark/resize-indicator.bootstrap.css.d.ts → color-picker/themes/color-picker.base.css.d.ts} +0 -0
  201. /package/components/{resize-container/themes/dark/resize-indicator.fluent.css.d.ts → color-picker/themes/dark/color-picker.bootstrap.css.d.ts} +0 -0
  202. /package/components/{resize-container/themes/dark/resize-indicator.indigo.css.d.ts → color-picker/themes/dark/color-picker.fluent.css.d.ts} +0 -0
  203. /package/components/{resize-container/themes/dark/resize-indicator.material.css.d.ts → color-picker/themes/dark/color-picker.indigo.css.d.ts} +0 -0
  204. /package/components/{resize-container/themes/dark/resize-indicator.shared.css.d.ts → color-picker/themes/dark/color-picker.material.css.d.ts} +0 -0
  205. /package/components/{resize-container/themes/light/resize-indicator.bootstrap.css.d.ts → color-picker/themes/light/color-picker.bootstrap.css.d.ts} +0 -0
  206. /package/components/{resize-container/themes/light/resize-indicator.fluent.css.d.ts → color-picker/themes/light/color-picker.fluent.css.d.ts} +0 -0
  207. /package/components/{resize-container/themes/light/resize-indicator.indigo.css.d.ts → color-picker/themes/light/color-picker.indigo.css.d.ts} +0 -0
  208. /package/components/{resize-container/themes/light/resize-indicator.material.css.d.ts → color-picker/themes/light/color-picker.material.css.d.ts} +0 -0
  209. /package/components/{resize-container/themes/light/resize-indicator.shared.css.d.ts → color-picker/themes/light/color-picker.shared.css.d.ts} +0 -0
  210. /package/components/{resize-container/themes/resize-container.base.css.d.ts → color-picker/themes/picker-canvas.base.css.d.ts} +0 -0
  211. /package/components/{resize-container/themes/shared/resize-container.common.css.d.ts → color-picker/themes/shared/color-picker.bootstrap.css.d.ts} +0 -0
  212. /package/components/{resize-container → color-picker}/themes/themes.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"position.js","sourceRoot":"","sources":["../../../src/components/tile-manager/position.ts"],"names":[],"mappings":"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","sourcesContent":["import { lastOf, partition } from '#internals/utils/arrays.js';\nimport type IgcTileManagerComponent from './tile-manager.js';\nimport type IgcTileComponent from './tile.js';\n\nclass TilesState {\n private _nextEmptyPosition = 0;\n\n public manager: IgcTileManagerComponent;\n\n private get _tiles(): IgcTileComponent[] {\n return Array.from(\n this.manager.querySelectorAll<IgcTileComponent>(':scope > igc-tile')\n );\n }\n\n /**\n * Returns the current tiles of the tile manager sorted by their position.\n */\n public get tiles(): IgcTileComponent[] {\n return this._tiles.toSorted((a, b) => a.position - b.position);\n }\n\n constructor(manager: IgcTileManagerComponent) {\n this.manager = manager;\n }\n\n public assignPositions(): void {\n let nextPosition = 0;\n const [positionedTiles, nonPositionedTiles] = partition(\n this._tiles,\n (tile) => tile.position !== -1\n );\n\n positionedTiles.sort((a, b) => a.position - b.position);\n\n for (const tile of positionedTiles) {\n // Fill any unassigned slots before the next assigned tile's position\n while (nextPosition < tile.position && nonPositionedTiles.length > 0) {\n const nonPositionedTile = nonPositionedTiles.shift()!;\n nonPositionedTile.position = nextPosition++;\n }\n\n tile.position = nextPosition;\n nextPosition = tile.position + 1;\n }\n\n for (const tile of nonPositionedTiles) {\n tile.position = nextPosition++;\n }\n }\n\n /** Updates the default (manual) slot of the tile manager with the current tiles. */\n public assignTiles(): void {\n this.manager.renderRoot.querySelector('slot')!.assign(...this._tiles);\n }\n\n public add(tile: IgcTileComponent): void {\n const tiles = this.tiles;\n\n if (tile.position > -1) {\n for (const each of tiles) {\n if (each !== tile && each.position >= tile.position) {\n each.position++;\n }\n }\n } else {\n const positionedTiles = this._tiles.filter((tile) => tile.position > -1);\n\n tile.position =\n positionedTiles.length > 1\n ? Math.max(...positionedTiles.map((tile) => tile.position)) + 1\n : this._nextEmptyPosition;\n\n this._nextEmptyPosition += 1;\n }\n }\n\n /**\n * Checks and adjusts tile spans based on the column count of the tile manager.\n */\n public adjustTileGridPosition(): void {\n const columnCount = this.manager.columnCount;\n\n if (columnCount > 0) {\n for (const tile of this.tiles) {\n let colStart = tile.colStart || 0;\n let colStartDelta = colStart > 0 ? 1 : 0;\n const colSpan = tile.colSpan || 0;\n\n if (colStart > columnCount) {\n colStart = 0;\n colStartDelta = 0;\n tile.colStart = 0;\n }\n\n if (colStart + colSpan > columnCount) {\n tile.colSpan = columnCount - colStart + colStartDelta;\n }\n }\n }\n }\n\n public remove(tile: IgcTileComponent): void {\n for (const each of this.tiles) {\n if (each.position >= tile.position) {\n each.position--;\n }\n }\n }\n}\n\ntype TileDragStackEntry = {\n tile: IgcTileComponent;\n position: number;\n column?: number | null;\n row?: number | null;\n};\n\nclass TileDragStack {\n private _stack: TileDragStackEntry[] = [];\n\n public peek(): IgcTileComponent {\n return lastOf(this._stack).tile;\n }\n\n public pop(): TileDragStackEntry | undefined {\n return this._stack.pop();\n }\n\n public push(tile: IgcTileComponent): void {\n this._stack.push({\n tile,\n position: tile.position,\n column: tile.colStart,\n row: tile.rowStart,\n });\n }\n\n public restore(): void {\n for (const {\n tile,\n position,\n column: colStart,\n row: rowStart,\n } of this._stack.toReversed()) {\n Object.assign(tile, {\n position,\n colStart,\n rowStart,\n });\n }\n }\n\n public reset(): void {\n this._stack = [];\n }\n}\n\nexport function createTilesState(manager: IgcTileManagerComponent) {\n return new TilesState(manager);\n}\n\nexport function createTileDragStack(): TileDragStack {\n return new TileDragStack();\n}\n\nexport function swapTiles(a: IgcTileComponent, b: IgcTileComponent): void {\n [a.colStart, b.colStart] = [b.colStart, a.colStart];\n [a.rowStart, b.rowStart] = [b.rowStart, a.colStart];\n [a.position, b.position] = [b.position, a.position];\n}\n"]}
1
+ {"version":3,"file":"position.js","sourceRoot":"","sources":["../../../src/components/tile-manager/position.ts"],"names":[],"mappings":"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","sourcesContent":["import { lastOf, partition } from '#internals/utils/arrays.js';\nimport type IgcTileManagerComponent from './tile-manager.js';\nimport type IgcTileComponent from './tile.js';\n\nclass TilesState {\n private readonly _manager: IgcTileManagerComponent;\n\n private get _tiles(): IgcTileComponent[] {\n return Array.from(\n this._manager.querySelectorAll<IgcTileComponent>(':scope > igc-tile')\n );\n }\n\n /**\n * Returns the current tiles of the tile manager sorted by their position.\n */\n public get tiles(): IgcTileComponent[] {\n return this._tiles.toSorted((a, b) => a.position - b.position);\n }\n\n constructor(manager: IgcTileManagerComponent) {\n this._manager = manager;\n }\n\n public assignPositions(): void {\n let nextPosition = 0;\n const [positionedTiles, nonPositionedTiles] = partition(\n this._tiles,\n (tile) => tile.position !== -1\n );\n\n positionedTiles.sort((a, b) => a.position - b.position);\n\n for (const tile of positionedTiles) {\n // Fill any unassigned slots before the next assigned tile's position\n while (nextPosition < tile.position && nonPositionedTiles.length > 0) {\n const nonPositionedTile = nonPositionedTiles.shift()!;\n nonPositionedTile.position = nextPosition++;\n }\n\n tile.position = nextPosition;\n nextPosition = tile.position + 1;\n }\n\n for (const tile of nonPositionedTiles) {\n tile.position = nextPosition++;\n }\n }\n\n /** Updates the default (manual) slot of the tile manager with the current tiles. */\n public assignTiles(): void {\n this._manager.renderRoot.querySelector('slot')!.assign(...this._tiles);\n }\n\n public add(tile: IgcTileComponent): void {\n if (tile.position > -1) {\n for (const each of this.tiles) {\n if (each !== tile && each.position >= tile.position) {\n each.position++;\n }\n }\n return;\n }\n\n const positionedTiles = this._tiles.filter((tile) => tile.position > -1);\n\n tile.position = positionedTiles.length\n ? Math.max(...positionedTiles.map((tile) => tile.position)) + 1\n : 0;\n }\n\n /**\n * Checks and adjusts tile spans based on the column count of the tile manager.\n */\n public adjustTileGridPosition(): void {\n const { columnCount } = this._manager;\n\n if (columnCount < 1) {\n return;\n }\n\n for (const tile of this.tiles) {\n let colStart = tile.colStart ?? 0;\n\n if (colStart > columnCount) {\n colStart = 0;\n tile.colStart = null;\n }\n\n if (colStart + tile.colSpan > columnCount) {\n tile.colSpan = columnCount - colStart + (colStart > 0 ? 1 : 0);\n }\n }\n }\n\n public remove(tile: IgcTileComponent): void {\n for (const each of this.tiles) {\n if (each.position >= tile.position) {\n each.position--;\n }\n }\n }\n}\n\ntype TileDragStackEntry = {\n tile: IgcTileComponent;\n position: number;\n colStart: number | null;\n rowStart: number | null;\n};\n\nclass TileDragStack {\n private _stack: TileDragStackEntry[] = [];\n\n public peek(): IgcTileComponent {\n return lastOf(this._stack).tile;\n }\n\n public pop(): void {\n this._stack.pop();\n }\n\n public push(tile: IgcTileComponent): void {\n const { position, colStart, rowStart } = tile;\n this._stack.push({ tile, position, colStart, rowStart });\n }\n\n public restore(): void {\n for (const { tile, ...placement } of this._stack.toReversed()) {\n Object.assign(tile, placement);\n }\n }\n\n public reset(): void {\n this._stack = [];\n }\n}\n\nexport function createTilesState(manager: IgcTileManagerComponent) {\n return new TilesState(manager);\n}\n\nexport function createTileDragStack(): TileDragStack {\n return new TileDragStack();\n}\n\nexport function swapTiles(a: IgcTileComponent, b: IgcTileComponent): void {\n [a.colStart, b.colStart] = [b.colStart, a.colStart];\n [a.rowStart, b.rowStart] = [b.rowStart, a.rowStart];\n [a.position, b.position] = [b.position, a.position];\n}\n"]}
@@ -1,22 +1,9 @@
1
- import type { ResizeState } from '../resize-container/types.js';
1
+ import type { ResizeState } from '#internals/directives/resize.js';
2
2
  import type IgcTileComponent from './tile.js';
3
- import type { TileGridDimension, TileGridPosition, TileResizeDimensions } from './types.js';
4
3
  declare class TileResizeState {
5
- private _initialPosition;
6
- private _resizeUtil;
7
- protected _gap: number;
8
- protected _prevDeltaX: number;
9
- protected _prevDeltaY: number;
10
- protected _prevSnappedWidth: number;
11
- protected _prevSnappedHeight: number;
12
- protected _position: TileGridPosition;
13
- protected _columns: TileGridDimension;
14
- protected _rows: TileGridDimension;
15
- resizedDimensions: TileResizeDimensions;
16
- get gap(): number;
17
- get position(): TileGridPosition;
18
- get columns(): TileGridDimension;
19
- get rows(): TileGridDimension;
4
+ private _gap;
5
+ private _position;
6
+ private _axes;
20
7
  calculateSnappedWidth(state: ResizeState): number;
21
8
  calculateSnappedHeight(state: ResizeState): number;
22
9
  updateState(tileRect: DOMRect, tile: IgcTileComponent, grid: HTMLElement): void;
@@ -28,11 +15,13 @@ declare class TileResizeState {
28
15
  colSpan: number;
29
16
  rowSpan: number;
30
17
  };
31
- private initState;
32
- private calculateTileStartPosition;
33
- private getGridOffset;
34
- private getResizeProps;
35
- private getResizeSpanProps;
18
+ private _calculateSnappedSize;
19
+ private _initState;
20
+ /**
21
+ * Resolves the tile's implicit grid start lines from its offset inside the
22
+ * grid container when the tile has no explicit `colStart`/`rowStart`.
23
+ */
24
+ private _calculateTileStartPosition;
36
25
  }
37
26
  export declare function createTileResizeState(): TileResizeState;
38
27
  export {};
@@ -1,7 +1,10 @@
1
1
  import { firstOf } from '#internals/utils/arrays.js';
2
2
  import { asNumber } from '#internals/utils/math.js';
3
- import { ResizeUtil } from './resize-util.js';
3
+ import { calculatePosition, calculateResizedSpan, calculateSnappedDimension, } from './resize-util.js';
4
4
  const CssValues = /(?<start>\d+)?\s*\/?\s*span\s*(?<span>\d+)?/gi;
5
+ function createAxisState(dimension = { entries: [], minSize: 0 }) {
6
+ return { dimension, prevDelta: 0, prevSnapped: 0 };
7
+ }
5
8
  function parseTileGridRect(tile) {
6
9
  const computed = getComputedStyle(tile);
7
10
  const { gridColumn, gridRow } = computed;
@@ -20,18 +23,14 @@ function parseTileGridRect(tile) {
20
23
  function parseTileParentGrid(gridContainer) {
21
24
  const computed = getComputedStyle(gridContainer);
22
25
  const { gap, gridTemplateColumns, gridTemplateRows } = computed;
23
- const columns = gridTemplateColumns.split(' ').map(asNumber);
24
- const rows = gridTemplateRows.split(' ').map(asNumber);
25
26
  return {
26
27
  gap: asNumber(gap),
27
28
  columns: {
28
- count: columns.length,
29
- entries: columns,
29
+ entries: gridTemplateColumns.split(' ').map(asNumber),
30
30
  minSize: asNumber(computed.getPropertyValue('--min-col-width')),
31
31
  },
32
32
  rows: {
33
- count: rows.length,
34
- entries: rows,
33
+ entries: gridTemplateRows.split(' ').map(asNumber),
35
34
  minSize: asNumber(computed.getPropertyValue('--min-row-height')),
36
35
  },
37
36
  };
@@ -39,138 +38,80 @@ function parseTileParentGrid(gridContainer) {
39
38
  class TileResizeState {
40
39
  constructor() {
41
40
  this._gap = 0;
42
- this._prevDeltaX = 0;
43
- this._prevDeltaY = 0;
44
- this._prevSnappedWidth = 0;
45
- this._prevSnappedHeight = 0;
46
41
  this._position = {
47
42
  column: { start: 0, span: 0 },
48
43
  row: { start: 0, span: 0 },
49
44
  };
50
- this._columns = {
51
- count: 0,
52
- entries: [],
53
- minSize: 0,
54
- };
55
- this._rows = {
56
- count: 0,
57
- entries: [],
58
- minSize: 0,
45
+ this._axes = {
46
+ column: createAxisState(),
47
+ row: createAxisState(),
59
48
  };
60
- this.resizedDimensions = {
61
- width: null,
62
- height: null,
63
- };
64
- }
65
- get gap() {
66
- return this._gap;
67
- }
68
- get position() {
69
- return structuredClone(this._position);
70
- }
71
- get columns() {
72
- return structuredClone(this._columns);
73
- }
74
- get rows() {
75
- return structuredClone(this._rows);
76
49
  }
77
50
  calculateSnappedWidth(state) {
78
- const resizeProps = this.getResizeProps(state);
79
- const snappedDimension = this._resizeUtil.calculateSnappedDimension(resizeProps);
80
- this._prevDeltaX = snappedDimension.newDelta;
81
- this._prevSnappedWidth = snappedDimension.snappedSize;
82
- return snappedDimension.snappedSize;
51
+ return this._calculateSnappedSize('column', state.deltaX, state.current.width);
83
52
  }
84
53
  calculateSnappedHeight(state) {
85
- const resizeProps = this.getResizeProps(state, true);
86
- const snappedDimension = this._resizeUtil.calculateSnappedDimension(resizeProps);
87
- this._prevDeltaY = snappedDimension.newDelta;
88
- this._prevSnappedHeight = snappedDimension.snappedSize;
89
- return snappedDimension.snappedSize;
54
+ return this._calculateSnappedSize('row', state.deltaY, state.current.height);
90
55
  }
91
56
  updateState(tileRect, tile, grid) {
92
- this.initState(grid, tile);
93
- this.calculateTileStartPosition(grid, tileRect);
57
+ this._initState(grid, tile);
58
+ this._calculateTileStartPosition(grid, tileRect);
94
59
  }
95
60
  calculateResizedGridPosition(rect) {
96
- const colProps = this.getResizeSpanProps(rect);
97
- const rowProps = this.getResizeSpanProps(rect, true);
98
- this._position.column.span =
99
- this._resizeUtil.calculateResizedSpan(colProps);
100
- this._position.row.span = this._resizeUtil.calculateResizedSpan(rowProps);
101
- return {
102
- colSpan: this._position.column.span,
103
- rowSpan: this._position.row.span,
104
- };
61
+ const { column, row } = this._position;
62
+ column.span = calculateResizedSpan({
63
+ targetSize: rect.width,
64
+ tilePosition: column,
65
+ tileGridDimension: this._axes.column.dimension,
66
+ gap: this._gap,
67
+ isRow: false,
68
+ });
69
+ row.span = calculateResizedSpan({
70
+ targetSize: rect.height,
71
+ tilePosition: row,
72
+ tileGridDimension: this._axes.row.dimension,
73
+ gap: this._gap,
74
+ isRow: true,
75
+ });
76
+ return { colSpan: column.span, rowSpan: row.span };
105
77
  }
106
- initState(grid, tile) {
78
+ _calculateSnappedSize(axis, currentDelta, currentSize) {
79
+ const axisState = this._axes[axis];
80
+ const { snappedSize, newDelta } = calculateSnappedDimension({
81
+ currentDelta,
82
+ currentSize,
83
+ prevDelta: axisState.prevDelta,
84
+ prevSnapped: axisState.prevSnapped,
85
+ gridEntries: axisState.dimension.entries,
86
+ startIndex: this._position[axis].start,
87
+ gap: this._gap,
88
+ });
89
+ axisState.prevDelta = newDelta;
90
+ axisState.prevSnapped = snappedSize;
91
+ return snappedSize;
92
+ }
93
+ _initState(grid, tile) {
107
94
  const { gap, columns, rows } = parseTileParentGrid(grid);
108
- this._resizeUtil = new ResizeUtil(gap);
109
- this._initialPosition = parseTileGridRect(tile);
110
- this._position = structuredClone(this._initialPosition);
111
95
  this._gap = gap;
112
- this._columns = columns;
113
- this._rows = rows;
114
- this._prevDeltaX = 0;
115
- this._prevDeltaY = 0;
116
- this._prevSnappedWidth = 0;
117
- this._prevSnappedHeight = 0;
96
+ this._position = parseTileGridRect(tile);
97
+ this._axes = {
98
+ column: createAxisState(columns),
99
+ row: createAxisState(rows),
100
+ };
118
101
  }
119
- calculateTileStartPosition(grid, tileRect) {
120
- if (this._position.column.start < 0) {
121
- const offsetX = this.getGridOffset(grid, 'horizontal');
122
- this._position.column.start = this._resizeUtil.calculatePosition(tileRect.left + window.scrollX + grid.scrollLeft - offsetX, this._columns.entries);
102
+ _calculateTileStartPosition(grid, tileRect) {
103
+ const { column, row } = this._position;
104
+ if (column.start >= 0 && row.start >= 0) {
105
+ return;
123
106
  }
124
- if (this._position.row.start < 0) {
125
- const offsetY = this.getGridOffset(grid, 'vertical');
126
- this._position.row.start = this._resizeUtil.calculatePosition(tileRect.top + window.scrollY - offsetY, this._rows.entries);
127
- }
128
- }
129
- getGridOffset(grid, axis) {
130
107
  const gridRect = grid.getBoundingClientRect();
131
108
  const computed = getComputedStyle(grid);
132
- return axis === 'horizontal'
133
- ? gridRect.left +
134
- window.scrollX +
135
- grid.scrollLeft +
136
- Number.parseFloat(computed.paddingLeft)
137
- : gridRect.top + window.scrollY + Number.parseFloat(computed.paddingTop);
138
- }
139
- getResizeProps(state, isRow = false) {
140
- return isRow
141
- ? {
142
- currentDelta: state.deltaY,
143
- currentSize: state.current.height,
144
- prevDelta: this._prevDeltaY,
145
- gridEntries: this._rows.entries,
146
- startIndex: this._position.row.start,
147
- prevSnapped: this._prevSnappedHeight,
148
- }
149
- : {
150
- currentDelta: state.deltaX,
151
- currentSize: state.current.width,
152
- prevDelta: this._prevDeltaX,
153
- gridEntries: this._columns.entries,
154
- startIndex: this._position.column.start,
155
- prevSnapped: this._prevSnappedWidth,
156
- };
157
- }
158
- getResizeSpanProps(rect, isRow = false) {
159
- return isRow
160
- ? {
161
- targetSize: rect.height,
162
- tilePosition: this.position.row,
163
- tileGridDimension: this.rows,
164
- gap: this.gap,
165
- isRow,
166
- }
167
- : {
168
- targetSize: rect.width,
169
- tilePosition: this.position.column,
170
- tileGridDimension: this.columns,
171
- gap: this.gap,
172
- isRow,
173
- };
109
+ if (column.start < 0) {
110
+ column.start = calculatePosition(tileRect.left - gridRect.left - Number.parseFloat(computed.paddingLeft), this._axes.column.dimension.entries, this._gap);
111
+ }
112
+ if (row.start < 0) {
113
+ row.start = calculatePosition(tileRect.top - gridRect.top - Number.parseFloat(computed.paddingTop), this._axes.row.dimension.entries, this._gap);
114
+ }
174
115
  }
175
116
  }
176
117
  export function createTileResizeState() {
@@ -1 +1 @@
1
- {"version":3,"file":"resize-state.js","sourceRoot":"","sources":["../../../src/components/tile-manager/resize-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { firstOf } from '#internals/utils/arrays.js';\nimport { asNumber } from '#internals/utils/math.js';\nimport type { ResizeState } from '../resize-container/types.js';\nimport { ResizeUtil } from './resize-util.js';\nimport type IgcTileComponent from './tile.js';\nimport type {\n ResizeProps,\n ResizeSpanProps,\n TileGridDimension,\n TileGridPosition,\n TileResizeDimensions,\n} from './types.js';\n\nconst CssValues = /(?<start>\\d+)?\\s*\\/?\\s*span\\s*(?<span>\\d+)?/gi;\n\nfunction parseTileGridRect(tile: IgcTileComponent): TileGridPosition {\n const computed = getComputedStyle(tile);\n const { gridColumn, gridRow } = computed;\n\n const [column, row] = [\n firstOf(Array.from(gridColumn.matchAll(CssValues))).groups!,\n firstOf(Array.from(gridRow.matchAll(CssValues))).groups!,\n ];\n\n return {\n column: {\n start: asNumber(column.start, -1),\n span: asNumber(column.span, -1),\n },\n row: { start: asNumber(row.start, -1), span: asNumber(row.span, -1) },\n };\n}\n\nfunction parseTileParentGrid(gridContainer: HTMLElement) {\n const computed = getComputedStyle(gridContainer);\n const { gap, gridTemplateColumns, gridTemplateRows } = computed;\n\n const columns = gridTemplateColumns.split(' ').map(asNumber);\n const rows = gridTemplateRows.split(' ').map(asNumber);\n\n return {\n gap: asNumber(gap),\n columns: {\n count: columns.length,\n entries: columns,\n minSize: asNumber(computed.getPropertyValue('--min-col-width')),\n },\n rows: {\n count: rows.length,\n entries: rows,\n minSize: asNumber(computed.getPropertyValue('--min-row-height')),\n },\n };\n}\n\nclass TileResizeState {\n private _initialPosition!: TileGridPosition;\n private _resizeUtil!: ResizeUtil;\n\n protected _gap = 0;\n protected _prevDeltaX = 0;\n protected _prevDeltaY = 0;\n\n protected _prevSnappedWidth = 0;\n protected _prevSnappedHeight = 0;\n\n protected _position: TileGridPosition = {\n column: { start: 0, span: 0 },\n row: { start: 0, span: 0 },\n };\n\n protected _columns: TileGridDimension = {\n count: 0,\n entries: [],\n minSize: 0,\n };\n\n protected _rows: TileGridDimension = {\n count: 0,\n entries: [],\n minSize: 0,\n };\n\n public resizedDimensions: TileResizeDimensions = {\n width: null,\n height: null,\n };\n\n public get gap(): number {\n return this._gap;\n }\n\n public get position(): TileGridPosition {\n return structuredClone(this._position);\n }\n\n public get columns(): TileGridDimension {\n return structuredClone(this._columns);\n }\n\n public get rows(): TileGridDimension {\n return structuredClone(this._rows);\n }\n\n public calculateSnappedWidth(state: ResizeState): number {\n const resizeProps = this.getResizeProps(state);\n const snappedDimension =\n this._resizeUtil.calculateSnappedDimension(resizeProps);\n\n this._prevDeltaX = snappedDimension.newDelta;\n this._prevSnappedWidth = snappedDimension.snappedSize;\n return snappedDimension.snappedSize;\n }\n\n public calculateSnappedHeight(state: ResizeState): number {\n const resizeProps = this.getResizeProps(state, true);\n const snappedDimension =\n this._resizeUtil.calculateSnappedDimension(resizeProps);\n\n this._prevDeltaY = snappedDimension.newDelta;\n this._prevSnappedHeight = snappedDimension.snappedSize;\n return snappedDimension.snappedSize;\n }\n\n public updateState(\n tileRect: DOMRect,\n tile: IgcTileComponent,\n grid: HTMLElement\n ): void {\n this.initState(grid, tile);\n this.calculateTileStartPosition(grid, tileRect);\n }\n\n /**\n * Calculates and returns the CSS column and row properties of a tile after resizing,\n * based on its new dimensions and starting position.\n */\n public calculateResizedGridPosition(rect: DOMRect) {\n const colProps = this.getResizeSpanProps(rect);\n const rowProps = this.getResizeSpanProps(rect, true);\n\n // REVIEW pass col minSize and allowOverflow?\n this._position.column.span =\n this._resizeUtil.calculateResizedSpan(colProps);\n this._position.row.span = this._resizeUtil.calculateResizedSpan(rowProps);\n\n return {\n colSpan: this._position.column.span,\n rowSpan: this._position.row.span,\n };\n }\n\n private initState(grid: HTMLElement, tile: IgcTileComponent): void {\n const { gap, columns, rows } = parseTileParentGrid(grid);\n\n this._resizeUtil = new ResizeUtil(gap);\n this._initialPosition = parseTileGridRect(tile);\n this._position = structuredClone(this._initialPosition);\n\n this._gap = gap;\n this._columns = columns;\n this._rows = rows;\n this._prevDeltaX = 0;\n this._prevDeltaY = 0;\n this._prevSnappedWidth = 0;\n this._prevSnappedHeight = 0;\n }\n\n private calculateTileStartPosition(\n grid: HTMLElement,\n tileRect: DOMRect\n ): void {\n if (this._position.column.start < 0) {\n const offsetX = this.getGridOffset(grid, 'horizontal');\n\n this._position.column.start = this._resizeUtil.calculatePosition(\n tileRect.left + window.scrollX + grid.scrollLeft - offsetX,\n this._columns.entries\n );\n }\n\n if (this._position.row.start < 0) {\n const offsetY = this.getGridOffset(grid, 'vertical');\n\n this._position.row.start = this._resizeUtil.calculatePosition(\n tileRect.top + window.scrollY - offsetY,\n this._rows.entries\n );\n }\n }\n\n private getGridOffset(\n grid: HTMLElement,\n axis: 'horizontal' | 'vertical'\n ): number {\n const gridRect = grid.getBoundingClientRect();\n const computed = getComputedStyle(grid);\n\n return axis === 'horizontal'\n ? gridRect.left +\n window.scrollX +\n grid.scrollLeft +\n Number.parseFloat(computed.paddingLeft)\n : gridRect.top + window.scrollY + Number.parseFloat(computed.paddingTop);\n }\n\n private getResizeProps(state: ResizeState, isRow = false): ResizeProps {\n return isRow\n ? {\n currentDelta: state.deltaY,\n currentSize: state.current.height,\n prevDelta: this._prevDeltaY,\n gridEntries: this._rows.entries,\n startIndex: this._position.row.start,\n prevSnapped: this._prevSnappedHeight,\n }\n : {\n currentDelta: state.deltaX,\n currentSize: state.current.width,\n prevDelta: this._prevDeltaX,\n gridEntries: this._columns.entries,\n startIndex: this._position.column.start,\n prevSnapped: this._prevSnappedWidth,\n };\n }\n\n private getResizeSpanProps(rect: DOMRect, isRow = false): ResizeSpanProps {\n return isRow\n ? {\n targetSize: rect.height,\n tilePosition: this.position.row,\n tileGridDimension: this.rows,\n gap: this.gap,\n isRow,\n }\n : {\n targetSize: rect.width,\n tilePosition: this.position.column,\n tileGridDimension: this.columns,\n gap: this.gap,\n isRow,\n };\n }\n}\n\nexport function createTileResizeState(): TileResizeState {\n return new TileResizeState();\n}\n"]}
1
+ {"version":3,"file":"resize-state.js","sourceRoot":"","sources":["../../../src/components/tile-manager/resize-state.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ResizeState } from '#internals/directives/resize.js';\nimport { firstOf } from '#internals/utils/arrays.js';\nimport { asNumber } from '#internals/utils/math.js';\nimport {\n calculatePosition,\n calculateResizedSpan,\n calculateSnappedDimension,\n} from './resize-util.js';\nimport type IgcTileComponent from './tile.js';\nimport type { TileGridDimension, TileGridPosition } from './types.js';\n\nconst CssValues = /(?<start>\\d+)?\\s*\\/?\\s*span\\s*(?<span>\\d+)?/gi;\n\ntype ResizeAxis = 'column' | 'row';\n\ntype ResizeAxisState = {\n dimension: TileGridDimension;\n prevDelta: number;\n prevSnapped: number;\n};\n\nfunction createAxisState(\n dimension: TileGridDimension = { entries: [], minSize: 0 }\n): ResizeAxisState {\n return { dimension, prevDelta: 0, prevSnapped: 0 };\n}\n\nfunction parseTileGridRect(tile: IgcTileComponent): TileGridPosition {\n const computed = getComputedStyle(tile);\n const { gridColumn, gridRow } = computed;\n\n const [column, row] = [\n firstOf(Array.from(gridColumn.matchAll(CssValues))).groups!,\n firstOf(Array.from(gridRow.matchAll(CssValues))).groups!,\n ];\n\n return {\n column: {\n start: asNumber(column.start, -1),\n span: asNumber(column.span, -1),\n },\n row: { start: asNumber(row.start, -1), span: asNumber(row.span, -1) },\n };\n}\n\nfunction parseTileParentGrid(gridContainer: HTMLElement) {\n const computed = getComputedStyle(gridContainer);\n const { gap, gridTemplateColumns, gridTemplateRows } = computed;\n\n return {\n gap: asNumber(gap),\n columns: {\n entries: gridTemplateColumns.split(' ').map(asNumber),\n minSize: asNumber(computed.getPropertyValue('--min-col-width')),\n },\n rows: {\n entries: gridTemplateRows.split(' ').map(asNumber),\n minSize: asNumber(computed.getPropertyValue('--min-row-height')),\n },\n };\n}\n\nclass TileResizeState {\n private _gap = 0;\n\n private _position: TileGridPosition = {\n column: { start: 0, span: 0 },\n row: { start: 0, span: 0 },\n };\n\n private _axes: Record<ResizeAxis, ResizeAxisState> = {\n column: createAxisState(),\n row: createAxisState(),\n };\n\n public calculateSnappedWidth(state: ResizeState): number {\n return this._calculateSnappedSize(\n 'column',\n state.deltaX,\n state.current.width\n );\n }\n\n public calculateSnappedHeight(state: ResizeState): number {\n return this._calculateSnappedSize(\n 'row',\n state.deltaY,\n state.current.height\n );\n }\n\n public updateState(\n tileRect: DOMRect,\n tile: IgcTileComponent,\n grid: HTMLElement\n ): void {\n this._initState(grid, tile);\n this._calculateTileStartPosition(grid, tileRect);\n }\n\n /**\n * Calculates and returns the CSS column and row properties of a tile after resizing,\n * based on its new dimensions and starting position.\n */\n public calculateResizedGridPosition(rect: DOMRect) {\n const { column, row } = this._position;\n\n // REVIEW pass col minSize and allowOverflow?\n column.span = calculateResizedSpan({\n targetSize: rect.width,\n tilePosition: column,\n tileGridDimension: this._axes.column.dimension,\n gap: this._gap,\n isRow: false,\n });\n\n row.span = calculateResizedSpan({\n targetSize: rect.height,\n tilePosition: row,\n tileGridDimension: this._axes.row.dimension,\n gap: this._gap,\n isRow: true,\n });\n\n return { colSpan: column.span, rowSpan: row.span };\n }\n\n private _calculateSnappedSize(\n axis: ResizeAxis,\n currentDelta: number,\n currentSize: number\n ): number {\n const axisState = this._axes[axis];\n\n const { snappedSize, newDelta } = calculateSnappedDimension({\n currentDelta,\n currentSize,\n prevDelta: axisState.prevDelta,\n prevSnapped: axisState.prevSnapped,\n gridEntries: axisState.dimension.entries,\n startIndex: this._position[axis].start,\n gap: this._gap,\n });\n\n axisState.prevDelta = newDelta;\n axisState.prevSnapped = snappedSize;\n return snappedSize;\n }\n\n private _initState(grid: HTMLElement, tile: IgcTileComponent): void {\n const { gap, columns, rows } = parseTileParentGrid(grid);\n\n this._gap = gap;\n this._position = parseTileGridRect(tile);\n this._axes = {\n column: createAxisState(columns),\n row: createAxisState(rows),\n };\n }\n\n /**\n * Resolves the tile's implicit grid start lines from its offset inside the\n * grid container when the tile has no explicit `colStart`/`rowStart`.\n */\n private _calculateTileStartPosition(\n grid: HTMLElement,\n tileRect: DOMRect\n ): void {\n const { column, row } = this._position;\n\n if (column.start >= 0 && row.start >= 0) {\n return;\n }\n\n const gridRect = grid.getBoundingClientRect();\n const computed = getComputedStyle(grid);\n\n if (column.start < 0) {\n column.start = calculatePosition(\n tileRect.left - gridRect.left - Number.parseFloat(computed.paddingLeft),\n this._axes.column.dimension.entries,\n this._gap\n );\n }\n\n if (row.start < 0) {\n row.start = calculatePosition(\n tileRect.top - gridRect.top - Number.parseFloat(computed.paddingTop),\n this._axes.row.dimension.entries,\n this._gap\n );\n }\n }\n}\n\nexport function createTileResizeState(): TileResizeState {\n return new TileResizeState();\n}\n"]}
@@ -1,8 +1,4 @@
1
1
  import type { ResizeProps, ResizeSpanProps, SnappedDimension } from './types.js';
2
- export declare class ResizeUtil {
3
- private gap;
4
- constructor(gap: number);
5
- calculateSnappedDimension(resizeProps: ResizeProps): SnappedDimension;
6
- calculateResizedSpan(props: ResizeSpanProps): number;
7
- calculatePosition(targetPosition: number, sizes: number[]): number;
8
- }
2
+ export declare function calculateSnappedDimension(props: ResizeProps): SnappedDimension;
3
+ export declare function calculateResizedSpan(props: ResizeSpanProps): number;
4
+ export declare function calculatePosition(targetPosition: number, sizes: number[], gap: number): number;
@@ -1,84 +1,77 @@
1
- export class ResizeUtil {
2
- constructor(gap) {
3
- this.gap = gap;
1
+ export function calculateSnappedDimension(props) {
2
+ const { currentDelta, prevDelta, currentSize, gridEntries, startIndex, prevSnapped, gap, } = props;
3
+ const effectiveDelta = currentDelta - prevDelta;
4
+ let snappedSize = currentSize;
5
+ if (Math.trunc(currentSize) < gridEntries[startIndex - 1]) {
6
+ return {
7
+ snappedSize: gridEntries[startIndex - 1],
8
+ newDelta: currentDelta,
9
+ };
4
10
  }
5
- calculateSnappedDimension(resizeProps) {
6
- const { currentDelta, prevDelta, currentSize, gridEntries, startIndex, prevSnapped, } = resizeProps;
7
- const effectiveDelta = currentDelta - prevDelta;
8
- let snappedSize = currentSize;
9
- if (Math.trunc(currentSize) < gridEntries[startIndex - 1]) {
10
- return {
11
- snappedSize: gridEntries[startIndex - 1],
12
- newDelta: currentDelta,
13
- };
14
- }
15
- if (effectiveDelta === 0 && prevSnapped) {
16
- return { snappedSize: prevSnapped, newDelta: currentDelta };
17
- }
18
- let accumulated = 0;
19
- for (let i = startIndex - 1; i < gridEntries.length; i++) {
20
- const currentEntry = gridEntries[i];
21
- const nextEntry = gridEntries[i + 1] ?? currentEntry;
22
- const prevEntry = i > 0 ? gridEntries[i - 1] : currentEntry;
23
- const halfwayExpand = accumulated + currentEntry + this.gap + nextEntry / 2;
24
- const halfwayShrink = accumulated + prevEntry / 2;
25
- const entryEnd = accumulated + currentEntry + this.gap;
26
- if (effectiveDelta > 0) {
27
- if (currentSize >= halfwayExpand &&
28
- currentSize <= entryEnd + nextEntry) {
29
- snappedSize = entryEnd + nextEntry;
30
- }
11
+ if (effectiveDelta === 0 && prevSnapped) {
12
+ return { snappedSize: prevSnapped, newDelta: currentDelta };
13
+ }
14
+ let accumulated = 0;
15
+ for (let i = startIndex - 1; i < gridEntries.length; i++) {
16
+ const currentEntry = gridEntries[i];
17
+ const nextEntry = gridEntries[i + 1] ?? currentEntry;
18
+ const prevEntry = i > 0 ? gridEntries[i - 1] : currentEntry;
19
+ const halfwayExpand = accumulated + currentEntry + gap + nextEntry / 2;
20
+ const halfwayShrink = accumulated + prevEntry / 2;
21
+ const entryEnd = accumulated + currentEntry + gap;
22
+ if (effectiveDelta > 0) {
23
+ if (currentSize >= halfwayExpand && currentSize <= entryEnd + nextEntry) {
24
+ snappedSize = entryEnd + nextEntry;
31
25
  }
32
- else if (effectiveDelta < 0) {
33
- if (currentSize <= halfwayShrink &&
34
- currentSize > accumulated - this.gap) {
35
- snappedSize = accumulated - this.gap;
36
- }
26
+ }
27
+ else if (effectiveDelta < 0) {
28
+ if (currentSize <= halfwayShrink && currentSize > accumulated - gap) {
29
+ snappedSize = accumulated - gap;
37
30
  }
38
- accumulated += currentEntry + this.gap;
39
31
  }
40
- return { snappedSize, newDelta: currentDelta };
32
+ accumulated += currentEntry + gap;
41
33
  }
42
- calculateResizedSpan(props) {
43
- const { targetSize, tilePosition, tileGridDimension, gap, isRow } = props;
44
- const { entries, minSize } = tileGridDimension;
45
- let accumulatedSize = 0;
46
- let newSpan = tilePosition.span;
47
- const sizesAfterStart = entries.slice(tilePosition.start - 1);
48
- const availableSize = sizesAfterStart.reduce((sum, s) => sum + s, 0) +
49
- (sizesAfterStart.length - 1) * gap;
50
- if (targetSize <= sizesAfterStart[0] + gap) {
51
- return 1;
52
- }
53
- if (Math.trunc(targetSize) > Math.trunc(availableSize)) {
54
- const remainingSize = targetSize - availableSize;
55
- const additionalSpan = Math.ceil(remainingSize / (minSize + gap));
56
- newSpan = sizesAfterStart.length + additionalSpan;
57
- return isRow ? newSpan : Math.min(entries.length, newSpan);
34
+ return { snappedSize, newDelta: currentDelta };
35
+ }
36
+ export function calculateResizedSpan(props) {
37
+ const { targetSize, tilePosition, tileGridDimension, gap, isRow } = props;
38
+ const { entries, minSize } = tileGridDimension;
39
+ let accumulatedSize = 0;
40
+ let newSpan = tilePosition.span;
41
+ const sizesAfterStart = entries.slice(tilePosition.start - 1);
42
+ const availableSize = sizesAfterStart.reduce((sum, s) => sum + s, 0) +
43
+ (sizesAfterStart.length - 1) * gap;
44
+ if (targetSize <= sizesAfterStart[0] + gap) {
45
+ return 1;
46
+ }
47
+ if (Math.trunc(targetSize) > Math.trunc(availableSize)) {
48
+ const remainingSize = targetSize - availableSize;
49
+ const additionalSpan = Math.ceil(remainingSize / (minSize + gap));
50
+ newSpan = sizesAfterStart.length + additionalSpan;
51
+ return isRow ? newSpan : Math.min(entries.length, newSpan);
52
+ }
53
+ for (let i = tilePosition.start - 1; i < entries.length; i++) {
54
+ const currentSize = entries[i];
55
+ const nextSize = entries[i + 1] ?? currentSize;
56
+ const halfwayPoint = accumulatedSize + currentSize + gap + nextSize / 2;
57
+ if (targetSize > halfwayPoint) {
58
+ newSpan = i + 3 - tilePosition.start;
58
59
  }
59
- for (let i = tilePosition.start - 1; i < entries.length; i++) {
60
- const currentSize = entries[i];
61
- const nextSize = entries[i + 1] ?? currentSize;
62
- const halfwayPoint = accumulatedSize + currentSize + gap + nextSize / 2;
63
- if (targetSize > halfwayPoint) {
64
- newSpan = i + 3 - tilePosition.start;
65
- }
66
- else {
67
- break;
68
- }
69
- accumulatedSize += currentSize + gap;
60
+ else {
61
+ break;
70
62
  }
71
- return newSpan;
63
+ accumulatedSize += currentSize + gap;
72
64
  }
73
- calculatePosition(targetPosition, sizes) {
74
- let accumulatedSize = 0;
75
- for (const [i, size] of sizes.entries()) {
76
- accumulatedSize += size + this.gap;
77
- if (Math.trunc(targetPosition) < Math.trunc(accumulatedSize - this.gap)) {
78
- return i + 1;
79
- }
65
+ return newSpan;
66
+ }
67
+ export function calculatePosition(targetPosition, sizes, gap) {
68
+ let accumulatedSize = 0;
69
+ for (const [i, size] of sizes.entries()) {
70
+ accumulatedSize += size + gap;
71
+ if (Math.trunc(targetPosition) < Math.trunc(accumulatedSize - gap)) {
72
+ return i + 1;
80
73
  }
81
- return 1;
82
74
  }
75
+ return 1;
83
76
  }
84
77
  //# sourceMappingURL=resize-util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resize-util.js","sourceRoot":"","sources":["../../../src/components/tile-manager/resize-util.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ResizeProps,\n ResizeSpanProps,\n SnappedDimension,\n} from './types.js';\n\nexport class ResizeUtil {\n private gap: number;\n\n constructor(gap: number) {\n this.gap = gap;\n }\n\n public calculateSnappedDimension(resizeProps: ResizeProps): SnappedDimension {\n const {\n currentDelta,\n prevDelta,\n currentSize,\n gridEntries,\n startIndex,\n prevSnapped,\n } = resizeProps;\n\n const effectiveDelta = currentDelta - prevDelta;\n let snappedSize = currentSize;\n\n // If current size is below minimum, force to the size of the starting cell.\n if (Math.trunc(currentSize) < gridEntries[startIndex - 1]) {\n return {\n snappedSize: gridEntries[startIndex - 1],\n newDelta: currentDelta,\n };\n }\n\n // If no change in delta and we have a snapped value, reuse it.\n if (effectiveDelta === 0 && prevSnapped) {\n return { snappedSize: prevSnapped, newDelta: currentDelta };\n }\n\n let accumulated = 0;\n for (let i = startIndex - 1; i < gridEntries.length; i++) {\n const currentEntry = gridEntries[i];\n const nextEntry = gridEntries[i + 1] ?? currentEntry;\n const prevEntry = i > 0 ? gridEntries[i - 1] : currentEntry;\n\n // Thresholds for snapping to the next or previous tile boundary.\n const halfwayExpand =\n accumulated + currentEntry + this.gap + nextEntry / 2;\n const halfwayShrink = accumulated + prevEntry / 2;\n const entryEnd = accumulated + currentEntry + this.gap;\n\n if (effectiveDelta > 0) {\n // Expanding: snap when passing the halfway threshold.\n if (\n currentSize >= halfwayExpand &&\n currentSize <= entryEnd + nextEntry\n ) {\n snappedSize = entryEnd + nextEntry;\n }\n } else if (effectiveDelta < 0) {\n // Shrinking: snap when falling below the halfway threshold.\n if (\n currentSize <= halfwayShrink &&\n currentSize > accumulated - this.gap\n ) {\n snappedSize = accumulated - this.gap;\n }\n }\n\n accumulated += currentEntry + this.gap;\n }\n\n return { snappedSize, newDelta: currentDelta };\n }\n\n public calculateResizedSpan(props: ResizeSpanProps): number {\n const { targetSize, tilePosition, tileGridDimension, gap, isRow } = props;\n const { entries, minSize } = tileGridDimension;\n\n let accumulatedSize = 0;\n let newSpan = tilePosition.span;\n\n const sizesAfterStart = entries.slice(tilePosition.start - 1);\n const availableSize =\n sizesAfterStart.reduce((sum, s) => sum + s, 0) +\n (sizesAfterStart.length - 1) * gap;\n\n if (targetSize <= sizesAfterStart[0] + gap) {\n return 1;\n }\n\n if (Math.trunc(targetSize) > Math.trunc(availableSize)) {\n const remainingSize = targetSize - availableSize;\n\n const additionalSpan = Math.ceil(remainingSize / (minSize + gap));\n newSpan = sizesAfterStart.length + additionalSpan;\n return isRow ? newSpan : Math.min(entries.length, newSpan);\n }\n\n for (let i = tilePosition.start - 1; i < entries.length; i++) {\n const currentSize = entries[i];\n const nextSize = entries[i + 1] ?? currentSize;\n\n const halfwayPoint = accumulatedSize + currentSize + gap + nextSize / 2;\n\n if (targetSize > halfwayPoint) {\n newSpan = i + 3 - tilePosition.start;\n } else {\n break;\n }\n\n accumulatedSize += currentSize + gap;\n }\n\n return newSpan;\n }\n\n public calculatePosition(targetPosition: number, sizes: number[]): number {\n let accumulatedSize = 0;\n\n for (const [i, size] of sizes.entries()) {\n accumulatedSize += size + this.gap;\n\n if (Math.trunc(targetPosition) < Math.trunc(accumulatedSize - this.gap)) {\n return i + 1;\n }\n }\n\n return 1;\n }\n}\n"]}
1
+ {"version":3,"file":"resize-util.js","sourceRoot":"","sources":["../../../src/components/tile-manager/resize-util.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ResizeProps,\n ResizeSpanProps,\n SnappedDimension,\n} from './types.js';\n\nexport function calculateSnappedDimension(\n props: ResizeProps\n): SnappedDimension {\n const {\n currentDelta,\n prevDelta,\n currentSize,\n gridEntries,\n startIndex,\n prevSnapped,\n gap,\n } = props;\n\n const effectiveDelta = currentDelta - prevDelta;\n let snappedSize = currentSize;\n\n // If current size is below minimum, force to the size of the starting cell.\n if (Math.trunc(currentSize) < gridEntries[startIndex - 1]) {\n return {\n snappedSize: gridEntries[startIndex - 1],\n newDelta: currentDelta,\n };\n }\n\n // If no change in delta and we have a snapped value, reuse it.\n if (effectiveDelta === 0 && prevSnapped) {\n return { snappedSize: prevSnapped, newDelta: currentDelta };\n }\n\n let accumulated = 0;\n for (let i = startIndex - 1; i < gridEntries.length; i++) {\n const currentEntry = gridEntries[i];\n const nextEntry = gridEntries[i + 1] ?? currentEntry;\n const prevEntry = i > 0 ? gridEntries[i - 1] : currentEntry;\n\n // Thresholds for snapping to the next or previous tile boundary.\n const halfwayExpand = accumulated + currentEntry + gap + nextEntry / 2;\n const halfwayShrink = accumulated + prevEntry / 2;\n const entryEnd = accumulated + currentEntry + gap;\n\n if (effectiveDelta > 0) {\n // Expanding: snap when passing the halfway threshold.\n if (currentSize >= halfwayExpand && currentSize <= entryEnd + nextEntry) {\n snappedSize = entryEnd + nextEntry;\n }\n } else if (effectiveDelta < 0) {\n // Shrinking: snap when falling below the halfway threshold.\n if (currentSize <= halfwayShrink && currentSize > accumulated - gap) {\n snappedSize = accumulated - gap;\n }\n }\n\n accumulated += currentEntry + gap;\n }\n\n return { snappedSize, newDelta: currentDelta };\n}\n\nexport function calculateResizedSpan(props: ResizeSpanProps): number {\n const { targetSize, tilePosition, tileGridDimension, gap, isRow } = props;\n const { entries, minSize } = tileGridDimension;\n\n let accumulatedSize = 0;\n let newSpan = tilePosition.span;\n\n const sizesAfterStart = entries.slice(tilePosition.start - 1);\n const availableSize =\n sizesAfterStart.reduce((sum, s) => sum + s, 0) +\n (sizesAfterStart.length - 1) * gap;\n\n if (targetSize <= sizesAfterStart[0] + gap) {\n return 1;\n }\n\n if (Math.trunc(targetSize) > Math.trunc(availableSize)) {\n const remainingSize = targetSize - availableSize;\n\n const additionalSpan = Math.ceil(remainingSize / (minSize + gap));\n newSpan = sizesAfterStart.length + additionalSpan;\n return isRow ? newSpan : Math.min(entries.length, newSpan);\n }\n\n for (let i = tilePosition.start - 1; i < entries.length; i++) {\n const currentSize = entries[i];\n const nextSize = entries[i + 1] ?? currentSize;\n\n const halfwayPoint = accumulatedSize + currentSize + gap + nextSize / 2;\n\n if (targetSize > halfwayPoint) {\n newSpan = i + 3 - tilePosition.start;\n } else {\n break;\n }\n\n accumulatedSize += currentSize + gap;\n }\n\n return newSpan;\n}\n\nexport function calculatePosition(\n targetPosition: number,\n sizes: number[],\n gap: number\n): number {\n let accumulatedSize = 0;\n\n for (const [i, size] of sizes.entries()) {\n accumulatedSize += size + gap;\n\n if (Math.trunc(targetPosition) < Math.trunc(accumulatedSize - gap)) {\n return i + 1;\n }\n }\n\n return 1;\n}\n"]}
@@ -12,7 +12,7 @@ export interface SerializedTile {
12
12
  id: string | null;
13
13
  }
14
14
  declare class TileManagerSerializer {
15
- tileManager: IgcTileManagerComponent;
15
+ private readonly _tileManager;
16
16
  constructor(tileManager: IgcTileManagerComponent);
17
17
  save(): SerializedTile[];
18
18
  saveAsJSON(): string;
@@ -1,9 +1,9 @@
1
1
  class TileManagerSerializer {
2
2
  constructor(tileManager) {
3
- this.tileManager = tileManager;
3
+ this._tileManager = tileManager;
4
4
  }
5
5
  save() {
6
- return this.tileManager.tiles.map((tile) => {
6
+ return this._tileManager.tiles.map((tile) => {
7
7
  return {
8
8
  colSpan: tile.colSpan,
9
9
  colStart: tile.colStart,
@@ -23,18 +23,17 @@ class TileManagerSerializer {
23
23
  }
24
24
  load(tiles) {
25
25
  const mapped = new Map(tiles.map((tile) => [tile.id, tile]));
26
- for (const tile of this.tileManager.tiles) {
27
- if (!mapped.has(tile.id)) {
28
- continue;
29
- }
26
+ for (const tile of this._tileManager.tiles) {
30
27
  const serialized = mapped.get(tile.id);
31
- Object.assign(tile, serialized);
28
+ if (serialized) {
29
+ Object.assign(tile, serialized);
30
+ }
32
31
  }
33
32
  }
34
33
  loadFromJSON(data) {
35
- if (!data)
36
- return;
37
- this.load(JSON.parse(data));
34
+ if (data) {
35
+ this.load(JSON.parse(data));
36
+ }
38
37
  }
39
38
  }
40
39
  export function createSerializer(host) {