@react-spectrum/card 3.0.0-alpha.32 → 3.0.0-alpha.34

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 (83) hide show
  1. package/dist/BaseLayout.main.js +21 -26
  2. package/dist/BaseLayout.main.js.map +1 -1
  3. package/dist/BaseLayout.mjs +22 -27
  4. package/dist/BaseLayout.module.js +21 -26
  5. package/dist/BaseLayout.module.js.map +1 -1
  6. package/dist/Card.main.js +2 -2
  7. package/dist/Card.mjs +3 -3
  8. package/dist/Card.module.js +2 -2
  9. package/dist/CardBase.main.js +37 -37
  10. package/dist/CardBase.main.js.map +1 -1
  11. package/dist/CardBase.mjs +38 -38
  12. package/dist/CardBase.module.js +37 -37
  13. package/dist/CardBase.module.js.map +1 -1
  14. package/dist/CardView.main.js +56 -48
  15. package/dist/CardView.main.js.map +1 -1
  16. package/dist/CardView.mjs +58 -50
  17. package/dist/CardView.module.js +57 -49
  18. package/dist/CardView.module.js.map +1 -1
  19. package/dist/CardViewContext.mjs +1 -1
  20. package/dist/GalleryLayout.main.js +10 -10
  21. package/dist/GalleryLayout.main.js.map +1 -1
  22. package/dist/GalleryLayout.mjs +11 -11
  23. package/dist/GalleryLayout.module.js +10 -10
  24. package/dist/GalleryLayout.module.js.map +1 -1
  25. package/dist/GridLayout.main.js +18 -42
  26. package/dist/GridLayout.main.js.map +1 -1
  27. package/dist/GridLayout.mjs +19 -43
  28. package/dist/GridLayout.module.js +18 -42
  29. package/dist/GridLayout.module.js.map +1 -1
  30. package/dist/WaterfallLayout.main.js +7 -7
  31. package/dist/WaterfallLayout.main.js.map +1 -1
  32. package/dist/WaterfallLayout.mjs +8 -8
  33. package/dist/WaterfallLayout.module.js +7 -7
  34. package/dist/WaterfallLayout.module.js.map +1 -1
  35. package/dist/ar-AE.mjs +1 -1
  36. package/dist/bg-BG.mjs +1 -1
  37. package/dist/card_vars_css.mjs +1 -1
  38. package/dist/cs-CZ.mjs +1 -1
  39. package/dist/da-DK.mjs +1 -1
  40. package/dist/de-DE.mjs +1 -1
  41. package/dist/el-GR.mjs +1 -1
  42. package/dist/en-US.mjs +1 -1
  43. package/dist/es-ES.mjs +1 -1
  44. package/dist/et-EE.mjs +1 -1
  45. package/dist/fi-FI.mjs +1 -1
  46. package/dist/fr-FR.mjs +1 -1
  47. package/dist/he-IL.mjs +1 -1
  48. package/dist/hr-HR.mjs +1 -1
  49. package/dist/hu-HU.mjs +1 -1
  50. package/dist/intlStrings.mjs +1 -1
  51. package/dist/it-IT.mjs +1 -1
  52. package/dist/ja-JP.mjs +1 -1
  53. package/dist/ko-KR.mjs +1 -1
  54. package/dist/lt-LT.mjs +1 -1
  55. package/dist/lv-LV.mjs +1 -1
  56. package/dist/nb-NO.mjs +1 -1
  57. package/dist/nl-NL.mjs +1 -1
  58. package/dist/pl-PL.mjs +1 -1
  59. package/dist/pt-BR.mjs +1 -1
  60. package/dist/pt-PT.mjs +1 -1
  61. package/dist/ro-RO.mjs +1 -1
  62. package/dist/ru-RU.mjs +1 -1
  63. package/dist/sk-SK.mjs +1 -1
  64. package/dist/sl-SI.mjs +1 -1
  65. package/dist/sr-SP.mjs +1 -1
  66. package/dist/sv-SE.mjs +1 -1
  67. package/dist/tr-TR.mjs +1 -1
  68. package/dist/types.d.ts +12 -11
  69. package/dist/types.d.ts.map +1 -1
  70. package/dist/uk-UA.mjs +1 -1
  71. package/dist/zh-CN.mjs +1 -1
  72. package/dist/zh-TW.main.js +1 -1
  73. package/dist/zh-TW.main.js.map +1 -1
  74. package/dist/zh-TW.mjs +2 -2
  75. package/dist/zh-TW.module.js +1 -1
  76. package/dist/zh-TW.module.js.map +1 -1
  77. package/package.json +20 -20
  78. package/src/BaseLayout.tsx +22 -19
  79. package/src/CardBase.tsx +1 -1
  80. package/src/CardView.tsx +42 -38
  81. package/src/GalleryLayout.tsx +2 -2
  82. package/src/GridLayout.tsx +0 -35
  83. package/src/WaterfallLayout.tsx +2 -2
@@ -20,14 +20,17 @@ $parcel$export(module.exports, "BaseLayout", () => $5ee605f09afaa4de$export$6494
20
20
  */
21
21
 
22
22
  class $5ee605f09afaa4de$export$64943d2e59d72a29 extends (0, $kQhHy$reactstatelyvirtualizer.Layout) {
23
- validate(invalidationContext) {
23
+ update(invalidationContext) {
24
+ var _invalidationContext_layoutOptions, _invalidationContext_layoutOptions1;
24
25
  this.collection = this.virtualizer.collection;
26
+ this.isLoading = ((_invalidationContext_layoutOptions = invalidationContext.layoutOptions) === null || _invalidationContext_layoutOptions === void 0 ? void 0 : _invalidationContext_layoutOptions.isLoading) || false;
27
+ this.direction = ((_invalidationContext_layoutOptions1 = invalidationContext.layoutOptions) === null || _invalidationContext_layoutOptions1 === void 0 ? void 0 : _invalidationContext_layoutOptions1.direction) || 'ltr';
25
28
  this.buildCollection(invalidationContext);
26
29
  // Remove layout info that doesn't exist in new collection
27
30
  if (this.lastCollection) {
28
31
  for (let key of this.lastCollection.getKeys())if (!this.collection.getItem(key)) this.layoutInfos.delete(key);
29
- if (!this.isLoading) this.layoutInfos.delete("loader");
30
- if (this.collection.size > 0) this.layoutInfos.delete("placeholder");
32
+ if (!this.isLoading) this.layoutInfos.delete('loader');
33
+ if (this.collection.size > 0) this.layoutInfos.delete('placeholder');
31
34
  }
32
35
  this.lastCollection = this.collection;
33
36
  }
@@ -39,30 +42,22 @@ class $5ee605f09afaa4de$export$64943d2e59d72a29 extends (0, $kQhHy$reactstatelyv
39
42
  getLayoutInfo(key) {
40
43
  return this.layoutInfos.get(key);
41
44
  }
42
- getVisibleLayoutInfos(rect) {
45
+ getVisibleLayoutInfos(rect, excludePersistedKeys = false) {
43
46
  let res = [];
44
- for (let layoutInfo of this.layoutInfos.values())if (this.isVisible(layoutInfo, rect)) res.push(layoutInfo);
47
+ for (let layoutInfo of this.layoutInfos.values())if (this.isVisible(layoutInfo, rect, excludePersistedKeys)) res.push(layoutInfo);
45
48
  return res;
46
49
  }
47
- isVisible(layoutInfo, rect) {
48
- return layoutInfo.rect.intersects(rect);
49
- }
50
- getInitialLayoutInfo(layoutInfo) {
51
- layoutInfo.opacity = 0;
52
- layoutInfo.transform = "scale3d(0.8, 0.8, 0.8)";
53
- return layoutInfo;
54
- }
55
- getFinalLayoutInfo(layoutInfo) {
56
- layoutInfo.opacity = 0;
57
- layoutInfo.transform = "scale3d(0.8, 0.8, 0.8)";
58
- return layoutInfo;
50
+ isVisible(layoutInfo, rect, excludePersistedKeys) {
51
+ if (layoutInfo.rect.intersects(rect)) return true;
52
+ if (!excludePersistedKeys) return this.virtualizer.isPersistedKey(layoutInfo.key);
53
+ return false;
59
54
  }
60
55
  _findClosestLayoutInfo(target, rect) {
61
- let layoutInfos = this.getVisibleLayoutInfos(rect);
56
+ let layoutInfos = this.getVisibleLayoutInfos(rect, true);
62
57
  let best = null;
63
58
  let bestDistance = Infinity;
64
59
  // Calculates distance as the distance between the center of 2 rects.
65
- for (let cur of layoutInfos)if (cur.type === "item") {
60
+ for (let cur of layoutInfos)if (cur.type === 'item') {
66
61
  let curRect = cur.rect;
67
62
  let targetMidX = (target.x + target.maxX) / 2;
68
63
  let targetMidY = (target.y + target.maxY) / 2;
@@ -101,25 +96,25 @@ class $5ee605f09afaa4de$export$64943d2e59d72a29 extends (0, $kQhHy$reactstatelyv
101
96
  getKeyRightOf(key) {
102
97
  // Expected key is the currently focused cell so we need the parent row key
103
98
  let parentRowKey = this.collection.getItem(key).parentKey;
104
- key = this.direction === "rtl" ? this.collection.getKeyBefore(parentRowKey) : this.collection.getKeyAfter(parentRowKey);
99
+ key = this.direction === 'rtl' ? this.collection.getKeyBefore(parentRowKey) : this.collection.getKeyAfter(parentRowKey);
105
100
  while(key != null){
106
101
  var _getFirstItem;
107
102
  let item = this.collection.getItem(key);
108
103
  // Don't check if item is disabled because we want to be able to focus disabled items in a grid (double check this)
109
- if (item.type === "item") return (_getFirstItem = (0, $kQhHy$reactstatelycollections.getFirstItem)((0, $kQhHy$reactstatelycollections.getChildNodes)(item, this.collection))) === null || _getFirstItem === void 0 ? void 0 : _getFirstItem.key;
110
- key = this.direction === "rtl" ? this.collection.getKeyBefore(key) : this.collection.getKeyAfter(key);
104
+ if (item.type === 'item') return (_getFirstItem = (0, $kQhHy$reactstatelycollections.getFirstItem)((0, $kQhHy$reactstatelycollections.getChildNodes)(item, this.collection))) === null || _getFirstItem === void 0 ? void 0 : _getFirstItem.key;
105
+ key = this.direction === 'rtl' ? this.collection.getKeyBefore(key) : this.collection.getKeyAfter(key);
111
106
  }
112
107
  }
113
108
  getKeyLeftOf(key) {
114
109
  // Expected key is the currently focused cell so we need the parent row key
115
110
  let parentRowKey = this.collection.getItem(key).parentKey;
116
- key = this.direction === "rtl" ? this.collection.getKeyAfter(parentRowKey) : this.collection.getKeyBefore(parentRowKey);
111
+ key = this.direction === 'rtl' ? this.collection.getKeyAfter(parentRowKey) : this.collection.getKeyBefore(parentRowKey);
117
112
  while(key != null){
118
113
  var _getFirstItem;
119
114
  let item = this.collection.getItem(key);
120
115
  // Don't check if item is disabled because we want to be able to focus disabled items in a grid (double check this)
121
- if (item.type === "item") return (_getFirstItem = (0, $kQhHy$reactstatelycollections.getFirstItem)((0, $kQhHy$reactstatelycollections.getChildNodes)(item, this.collection))) === null || _getFirstItem === void 0 ? void 0 : _getFirstItem.key;
122
- key = this.direction === "rtl" ? this.collection.getKeyAfter(key) : this.collection.getKeyBefore(key);
116
+ if (item.type === 'item') return (_getFirstItem = (0, $kQhHy$reactstatelycollections.getFirstItem)((0, $kQhHy$reactstatelycollections.getChildNodes)(item, this.collection))) === null || _getFirstItem === void 0 ? void 0 : _getFirstItem.key;
117
+ key = this.direction === 'rtl' ? this.collection.getKeyAfter(key) : this.collection.getKeyBefore(key);
123
118
  }
124
119
  }
125
120
  getFirstKey() {
@@ -209,7 +204,7 @@ class $5ee605f09afaa4de$export$64943d2e59d72a29 extends (0, $kQhHy$reactstatelyv
209
204
  this.layoutInfos = new Map();
210
205
  this.collator = options.collator;
211
206
  this.lastCollection = null;
212
- this.scale = options.scale || "medium";
207
+ this.scale = options.scale || 'medium';
213
208
  this.margin = options.margin || 24;
214
209
  }
215
210
  }
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/@react-spectrum/card/src/BaseLayout.tsx"],"sourcesContent":["/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Direction, Key, KeyboardDelegate, Node} from '@react-types/shared';\nimport {getChildNodes, getFirstItem} from '@react-stately/collections';\nimport {GridCollection} from '@react-stately/grid';\nimport {InvalidationContext, Layout, LayoutInfo, Rect, Size} from '@react-stately/virtualizer';\nimport {Scale} from '@react-types/provider';\n\nexport interface BaseLayoutOptions {\n collator?: Intl.Collator,\n // TODO: is this valid or is scale a spectrum specific thing that should be left out of the layouts?\n scale?: Scale,\n /**\n * The margin around the grid view between the edges and the items.\n * @default 24\n */\n margin?: number\n}\n\nexport class BaseLayout<T> extends Layout<Node<T>> implements KeyboardDelegate {\n protected contentSize: Size;\n protected layoutInfos: Map<Key, LayoutInfo>;\n protected collator: Intl.Collator;\n protected lastCollection: GridCollection<T>;\n collection: GridCollection<T>;\n isLoading: boolean;\n disabledKeys: Set<Key> = new Set();\n direction: Direction;\n scale: Scale;\n margin: number;\n\n constructor(options: BaseLayoutOptions = {}) {\n super();\n this.layoutInfos = new Map();\n this.collator = options.collator;\n this.lastCollection = null;\n this.scale = options.scale || 'medium';\n this.margin = options.margin || 24;\n }\n\n validate(invalidationContext: InvalidationContext<Node<T>, unknown>) {\n this.collection = this.virtualizer.collection as GridCollection<T>;\n this.buildCollection(invalidationContext);\n\n // Remove layout info that doesn't exist in new collection\n if (this.lastCollection) {\n for (let key of this.lastCollection.getKeys()) {\n if (!this.collection.getItem(key)) {\n this.layoutInfos.delete(key);\n }\n }\n\n if (!this.isLoading) {\n this.layoutInfos.delete('loader');\n }\n\n if (this.collection.size > 0) {\n this.layoutInfos.delete('placeholder');\n }\n }\n\n this.lastCollection = this.collection;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n buildCollection(invalidationContext?: InvalidationContext<Node<T>, unknown>) {}\n\n getContentSize() {\n return this.contentSize;\n }\n\n getLayoutInfo(key: Key) {\n return this.layoutInfos.get(key);\n }\n\n getVisibleLayoutInfos(rect) {\n let res: LayoutInfo[] = [];\n\n for (let layoutInfo of this.layoutInfos.values()) {\n if (this.isVisible(layoutInfo, rect)) {\n res.push(layoutInfo);\n }\n }\n\n return res;\n }\n\n isVisible(layoutInfo: LayoutInfo, rect: Rect) {\n return layoutInfo.rect.intersects(rect);\n }\n\n getInitialLayoutInfo(layoutInfo: LayoutInfo) {\n layoutInfo.opacity = 0;\n layoutInfo.transform = 'scale3d(0.8, 0.8, 0.8)';\n return layoutInfo;\n }\n\n getFinalLayoutInfo(layoutInfo: LayoutInfo) {\n layoutInfo.opacity = 0;\n layoutInfo.transform = 'scale3d(0.8, 0.8, 0.8)';\n return layoutInfo;\n }\n\n _findClosestLayoutInfo(target: Rect, rect: Rect) {\n let layoutInfos = this.getVisibleLayoutInfos(rect);\n let best = null;\n let bestDistance = Infinity;\n\n // Calculates distance as the distance between the center of 2 rects.\n for (let cur of layoutInfos) {\n if (cur.type === 'item') {\n let curRect = cur.rect;\n let targetMidX = (target.x + target.maxX) / 2;\n let targetMidY = (target.y + target.maxY) / 2;\n let curMidX = (curRect.x + curRect.maxX) / 2;\n let curMidY = (curRect.y + curRect.maxY) / 2;\n let dist = Math.pow(targetMidX - curMidX, 2) + Math.pow(targetMidY - curMidY, 2);\n if (dist < bestDistance) {\n best = cur;\n bestDistance = dist;\n }\n }\n }\n\n return best;\n }\n\n _findClosest(target: Rect, rect: Rect) {\n let best = this._findClosestLayoutInfo(target, rect);\n return best || null;\n }\n\n getKeyBelow(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n let rect = new Rect(layoutInfo.rect.x, layoutInfo.rect.maxY + 1, layoutInfo.rect.width, this.virtualizer.visibleRect.height);\n let closestRow = this.collection.getItem(this._findClosest(layoutInfo.rect, rect)?.key);\n return getFirstItem(getChildNodes(closestRow, this.collection))?.key;\n }\n\n getKeyAbove(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n let rect = new Rect(layoutInfo.rect.x, 0, layoutInfo.rect.width, layoutInfo.rect.y - 1);\n let closestRow = this.collection.getItem(this._findClosest(layoutInfo.rect, rect)?.key);\n return getFirstItem(getChildNodes(closestRow, this.collection))?.key;\n }\n\n getKeyRightOf(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n key = this.direction === 'rtl' ? this.collection.getKeyBefore(parentRowKey) : this.collection.getKeyAfter(parentRowKey);\n\n while (key != null) {\n let item = this.collection.getItem(key);\n // Don't check if item is disabled because we want to be able to focus disabled items in a grid (double check this)\n if (item.type === 'item') {\n return getFirstItem(getChildNodes(item, this.collection))?.key;\n }\n key = this.direction === 'rtl' ? this.collection.getKeyBefore(key) : this.collection.getKeyAfter(key);\n }\n }\n\n getKeyLeftOf(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n key = this.direction === 'rtl' ? this.collection.getKeyAfter(parentRowKey) : this.collection.getKeyBefore(parentRowKey);\n while (key != null) {\n let item = this.collection.getItem(key);\n // Don't check if item is disabled because we want to be able to focus disabled items in a grid (double check this)\n if (item.type === 'item') {\n return getFirstItem(getChildNodes(item, this.collection))?.key;\n }\n\n key = this.direction === 'rtl' ? this.collection.getKeyAfter(key) : this.collection.getKeyBefore(key);\n }\n }\n\n getFirstKey() {\n let firstRow = this.collection.getItem(this.collection.getFirstKey());\n return getFirstItem(getChildNodes(firstRow, this.collection))?.key;\n }\n\n getLastKey() {\n let lastRow = this.collection.getItem(this.collection.getLastKey());\n return getFirstItem(getChildNodes(lastRow, this.collection))?.key;\n }\n\n // TODO: pretty unwieldy because it needs to bounce back and forth between the parent key and the child key\n // Perhaps have layoutInfo store childKey as well so we don't need to do this? Or maybe make the layoutInfos be the cells instead of the rows?\n getKeyPageAbove(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n\n if (layoutInfo) {\n let pageY = Math.max(0, layoutInfo.rect.y + layoutInfo.rect.height - this.virtualizer.visibleRect.height);\n // If the node is so large that it spans multiple page heights, return the key of the item immediately above\n // Otherwise keep going up until we exceed a single page height worth of nodes\n let keyAbove = this.collection.getItem(this.getKeyAbove(key))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyAbove);\n\n if (layoutInfo && layoutInfo.rect.y > pageY) {\n while (layoutInfo && layoutInfo.rect.y > pageY) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n let keyAbove = this.collection.getItem(this.getKeyAbove(childKey))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyAbove);\n }\n }\n\n if (layoutInfo) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n return childKey;\n }\n }\n\n return this.getFirstKey();\n }\n\n // TODO: pretty unwieldy because it needs to bounce back and forth between the parent key and the child key\n // Perhaps have layoutInfo store childKey as well so we don't need to do this?\n getKeyPageBelow(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n if (layoutInfo) {\n let pageY = Math.min(this.virtualizer.contentSize.height, layoutInfo.rect.y - layoutInfo.rect.height + this.virtualizer.visibleRect.height);\n // If the node is so large that it spans multiple page heights, return the key of the item immediately below\n // Otherwise keep going up until we exceed a single page height worth of nodes\n let keyBelow = this.collection.getItem(this.getKeyBelow(key))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyBelow);\n if (layoutInfo && layoutInfo.rect.y < pageY) {\n while (layoutInfo && layoutInfo.rect.y < pageY) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n let keyBelow = this.collection.getItem(this.getKeyBelow(childKey))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyBelow);\n }\n }\n\n if (layoutInfo) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n return childKey;\n }\n }\n\n return this.getLastKey();\n }\n\n getKeyForSearch(search: string, fromKey?: Key) {\n if (!this.collator) {\n return null;\n }\n\n let collection = this.collection;\n let key = fromKey ?? this.getFirstKey();\n\n let startItem = collection.getItem(key);\n key = startItem.parentKey;\n\n while (key != null) {\n let item = collection.getItem(key);\n if (item.textValue) {\n let substring = item.textValue.slice(0, search.length);\n if (this.collator.compare(substring, search) === 0) {\n return getFirstItem(getChildNodes(item, this.collection))?.key;\n }\n }\n\n key = this.collection.getKeyAfter(key);\n }\n\n return null;\n }\n}\n"],"names":[],"version":3,"file":"BaseLayout.main.js.map"}
1
+ {"mappings":";;;;;;;;;AAAA;;;;;;;;;;CAUC;;AAwBM,MAAM,kDAAsB,CAAA,GAAA,qCAAK;IAqBtC,OAAO,mBAA+D,EAAE;YAErD,oCACA;QAFjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU;QAC7C,IAAI,CAAC,SAAS,GAAG,EAAA,qCAAA,oBAAoB,aAAa,cAAjC,yDAAA,mCAAmC,SAAS,KAAI;QACjE,IAAI,CAAC,SAAS,GAAG,EAAA,sCAAA,oBAAoB,aAAa,cAAjC,0DAAA,oCAAmC,SAAS,KAAI;QACjE,IAAI,CAAC,eAAe,CAAC;QAErB,0DAA0D;QAC1D,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,KAAK,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,GACzC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAI5B,IAAI,CAAC,IAAI,CAAC,SAAS,EACjB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAG1B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,GACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAE5B;QAEA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU;IACvC;IAEA,6DAA6D;IAC7D,gBAAgB,mBAAyC,EAAE,CAAC;IAE5D,iBAAiB;QACf,OAAO,IAAI,CAAC,WAAW;IACzB;IAEA,cAAc,GAAQ,EAAE;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;IAC9B;IAEA,sBAAsB,IAAU,EAAE,uBAAuB,KAAK,EAAE;QAC9D,IAAI,MAAoB,EAAE;QAE1B,KAAK,IAAI,cAAc,IAAI,CAAC,WAAW,CAAC,MAAM,GAC5C,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,MAAM,uBACnC,IAAI,IAAI,CAAC;QAIb,OAAO;IACT;IAEA,UAAU,UAAsB,EAAE,IAAU,EAAE,oBAA6B,EAAE;QAC3E,IAAI,WAAW,IAAI,CAAC,UAAU,CAAC,OAC7B,OAAO;QAGT,IAAI,CAAC,sBACH,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,GAAG;QAGvD,OAAO;IACT;IAEA,uBAAuB,MAAY,EAAE,IAAU,EAAE;QAC/C,IAAI,cAAc,IAAI,CAAC,qBAAqB,CAAC,MAAM;QACnD,IAAI,OAAO;QACX,IAAI,eAAe;QAEnB,qEAAqE;QACrE,KAAK,IAAI,OAAO,YACd,IAAI,IAAI,IAAI,KAAK,QAAQ;YACvB,IAAI,UAAU,IAAI,IAAI;YACtB,IAAI,aAAa,AAAC,CAAA,OAAO,CAAC,GAAG,OAAO,IAAI,AAAD,IAAK;YAC5C,IAAI,aAAa,AAAC,CAAA,OAAO,CAAC,GAAG,OAAO,IAAI,AAAD,IAAK;YAC5C,IAAI,UAAU,AAAC,CAAA,QAAQ,CAAC,GAAG,QAAQ,IAAI,AAAD,IAAK;YAC3C,IAAI,UAAU,AAAC,CAAA,QAAQ,CAAC,GAAG,QAAQ,IAAI,AAAD,IAAK;YAC3C,IAAI,OAAO,KAAK,GAAG,CAAC,aAAa,SAAS,KAAK,KAAK,GAAG,CAAC,aAAa,SAAS;YAC9E,IAAI,OAAO,cAAc;gBACvB,OAAO;gBACP,eAAe;YACjB;QACF;QAGF,OAAO;IACT;IAEA,aAAa,MAAY,EAAE,IAAU,EAAE;QACrC,IAAI,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ;QAC/C,OAAO,QAAQ;IACjB;IAEA,YAAY,GAAQ,EAAE;YAKqB,oBAClC;QALP,2EAA2E;QAC3E,IAAI,eAAe,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,SAAS;QACzD,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC;QACpC,IAAI,OAAO,IAAI,CAAA,GAAA,mCAAG,EAAE,WAAW,IAAI,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,IAAI,GAAG,GAAG,WAAW,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM;QAC3H,IAAI,aAAa,IAAI,CAAC,UAAU,CAAC,OAAO,EAAC,qBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,EAAE,mBAAnC,yCAAA,mBAA0C,GAAG;QACtF,QAAO,gBAAA,CAAA,GAAA,2CAAW,EAAE,CAAA,GAAA,4CAAY,EAAE,YAAY,IAAI,CAAC,UAAU,gBAAtD,oCAAA,cAA0D,GAAG;IACtE;IAEA,YAAY,GAAQ,EAAE;YAKqB,oBAClC;QALP,2EAA2E;QAC3E,IAAI,eAAe,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,SAAS;QACzD,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC;QACpC,IAAI,OAAO,IAAI,CAAA,GAAA,mCAAG,EAAE,WAAW,IAAI,CAAC,CAAC,EAAE,GAAG,WAAW,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC,GAAG;QACrF,IAAI,aAAa,IAAI,CAAC,UAAU,CAAC,OAAO,EAAC,qBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,EAAE,mBAAnC,yCAAA,mBAA0C,GAAG;QACtF,QAAO,gBAAA,CAAA,GAAA,2CAAW,EAAE,CAAA,GAAA,4CAAY,EAAE,YAAY,IAAI,CAAC,UAAU,gBAAtD,oCAAA,cAA0D,GAAG;IACtE;IAEA,cAAc,GAAQ,EAAE;QACtB,2EAA2E;QAC3E,IAAI,eAAe,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,SAAS;QACzD,MAAM,IAAI,CAAC,SAAS,KAAK,QAAS,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,gBAAgB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAE3G,MAAO,OAAO,KAAM;gBAIT;YAHT,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YACnC,mHAAmH;YACnH,IAAI,KAAK,IAAI,KAAK,QAChB,QAAO,gBAAA,CAAA,GAAA,2CAAW,EAAE,CAAA,GAAA,4CAAY,EAAE,MAAM,IAAI,CAAC,UAAU,gBAAhD,oCAAA,cAAoD,GAAG;YAEhE,MAAM,IAAI,CAAC,SAAS,KAAK,QAAS,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QACpG;IACF;IAEA,aAAa,GAAQ,EAAE;QACrB,2EAA2E;QAC3E,IAAI,eAAe,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,SAAS;QACzD,MAAM,IAAI,CAAC,SAAS,KAAK,QAAS,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,gBAAgB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAC3G,MAAO,OAAO,KAAM;gBAIT;YAHT,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YACnC,mHAAmH;YACnH,IAAI,KAAK,IAAI,KAAK,QAChB,QAAO,gBAAA,CAAA,GAAA,2CAAW,EAAE,CAAA,GAAA,4CAAY,EAAE,MAAM,IAAI,CAAC,UAAU,gBAAhD,oCAAA,cAAoD,GAAG;YAGhE,MAAM,IAAI,CAAC,SAAS,KAAK,QAAS,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QACpG;IACF;IAEA,cAAc;YAEL;QADP,IAAI,WAAW,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW;QAClE,QAAO,gBAAA,CAAA,GAAA,2CAAW,EAAE,CAAA,GAAA,4CAAY,EAAE,UAAU,IAAI,CAAC,UAAU,gBAApD,oCAAA,cAAwD,GAAG;IACpE;IAEA,aAAa;YAEJ;QADP,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU;QAChE,QAAO,gBAAA,CAAA,GAAA,2CAAW,EAAE,CAAA,GAAA,4CAAY,EAAE,SAAS,IAAI,CAAC,UAAU,gBAAnD,oCAAA,cAAuD,GAAG;IACnE;IAEA,2GAA2G;IAC3G,8IAA8I;IAC9I,gBAAgB,GAAQ,EAAE;QACxB,2EAA2E;QAC3E,IAAI,eAAe,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,SAAS;QACzD,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC;QAEpC,IAAI,YAAY;gBAIC;YAHf,IAAI,QAAQ,KAAK,GAAG,CAAC,GAAG,WAAW,IAAI,CAAC,CAAC,GAAG,WAAW,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM;YACxG,4GAA4G;YAC5G,8EAA8E;YAC9E,IAAI,YAAW,2BAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAzC,+CAAA,yBAAgD,SAAS;YACxE,aAAa,IAAI,CAAC,aAAa,CAAC;YAEhC,IAAI,cAAc,WAAW,IAAI,CAAC,CAAC,GAAG,OACpC,MAAO,cAAc,WAAW,IAAI,CAAC,CAAC,GAAG,MAAO;oBAC/B,eACA;gBADf,IAAI,YAAW,gBAAA,CAAA,GAAA,2CAAW,EAAE,CAAA,GAAA,4CAAY,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC,UAAU,gBAAnF,oCAAA,cAAuF,GAAG;gBACzG,IAAI,YAAW,4BAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,wBAAzC,gDAAA,0BAAqD,SAAS;gBAC7E,aAAa,IAAI,CAAC,aAAa,CAAC;YAClC;YAGF,IAAI,YAAY;oBACC;gBAAf,IAAI,YAAW,iBAAA,CAAA,GAAA,2CAAW,EAAE,CAAA,GAAA,4CAAY,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC,UAAU,gBAAnF,qCAAA,eAAuF,GAAG;gBACzG,OAAO;YACT;QACF;QAEA,OAAO,IAAI,CAAC,WAAW;IACzB;IAEA,2GAA2G;IAC3G,8EAA8E;IAC9E,gBAAgB,GAAQ,EAAE;QACxB,2EAA2E;QAC3E,IAAI,eAAe,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,SAAS;QACzD,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC;QACpC,IAAI,YAAY;gBAIE;YAHhB,IAAI,QAAQ,KAAK,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,IAAI,CAAC,CAAC,GAAG,WAAW,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM;YAC1I,4GAA4G;YAC5G,8EAA8E;YAC9E,IAAI,YAAY,2BAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAzC,+CAAA,yBAAgD,SAAS;YACzE,aAAa,IAAI,CAAC,aAAa,CAAC;YAChC,IAAI,cAAc,WAAW,IAAI,CAAC,CAAC,GAAG,OACpC,MAAO,cAAc,WAAW,IAAI,CAAC,CAAC,GAAG,MAAO;oBAC/B,eACA;gBADf,IAAI,YAAW,gBAAA,CAAA,GAAA,2CAAW,EAAE,CAAA,GAAA,4CAAY,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC,UAAU,gBAAnF,oCAAA,cAAuF,GAAG;gBACzG,IAAI,YAAW,4BAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,wBAAzC,gDAAA,0BAAqD,SAAS;gBAC7E,aAAa,IAAI,CAAC,aAAa,CAAC;YAClC;YAGF,IAAI,YAAY;oBACC;gBAAf,IAAI,YAAW,iBAAA,CAAA,GAAA,2CAAW,EAAE,CAAA,GAAA,4CAAY,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC,UAAU,gBAAnF,qCAAA,eAAuF,GAAG;gBACzG,OAAO;YACT;QACF;QAEA,OAAO,IAAI,CAAC,UAAU;IACxB;IAEA,gBAAgB,MAAc,EAAE,OAAa,EAAE;QAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAChB,OAAO;QAGT,IAAI,aAAa,IAAI,CAAC,UAAU;QAChC,IAAI,MAAM,oBAAA,qBAAA,UAAW,IAAI,CAAC,WAAW;QAErC,IAAI,YAAY,WAAW,OAAO,CAAC;QACnC,MAAM,UAAU,SAAS;QAEzB,MAAO,OAAO,KAAM;YAClB,IAAI,OAAO,WAAW,OAAO,CAAC;YAC9B,IAAI,KAAK,SAAS,EAAE;oBAGT;gBAFT,IAAI,YAAY,KAAK,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,MAAM;gBACrD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,YAAY,GAC/C,QAAO,gBAAA,CAAA,GAAA,2CAAW,EAAE,CAAA,GAAA,4CAAY,EAAE,MAAM,IAAI,CAAC,UAAU,gBAAhD,oCAAA,cAAoD,GAAG;YAElE;YAEA,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QACpC;QAEA,OAAO;IACT;IAjPA,YAAY,UAA6B,CAAC,CAAC,CAAE;QAC3C,KAAK;aANP,eAAyB,IAAI;QAO3B,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,QAAQ;QAChC,IAAI,CAAC,cAAc,GAAG;QACtB,IAAI,CAAC,KAAK,GAAG,QAAQ,KAAK,IAAI;QAC9B,IAAI,CAAC,MAAM,GAAG,QAAQ,MAAM,IAAI;IAClC;AA2OF","sources":["packages/@react-spectrum/card/src/BaseLayout.tsx"],"sourcesContent":["/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Direction, Key, KeyboardDelegate, Node} from '@react-types/shared';\nimport {getChildNodes, getFirstItem} from '@react-stately/collections';\nimport {GridCollection} from '@react-stately/grid';\nimport {InvalidationContext, Layout, LayoutInfo, Rect, Size} from '@react-stately/virtualizer';\nimport {Scale} from '@react-types/provider';\n\nexport interface BaseLayoutOptions {\n collator?: Intl.Collator,\n // TODO: is this valid or is scale a spectrum specific thing that should be left out of the layouts?\n scale?: Scale,\n /**\n * The margin around the grid view between the edges and the items.\n * @default 24\n */\n margin?: number\n}\n\ninterface CardViewLayoutOptions {\n isLoading: boolean,\n direction: Direction\n}\n\nexport class BaseLayout<T> extends Layout<Node<T>, CardViewLayoutOptions> implements KeyboardDelegate {\n protected contentSize: Size;\n protected layoutInfos: Map<Key, LayoutInfo>;\n protected collator: Intl.Collator;\n protected lastCollection: GridCollection<T>;\n collection: GridCollection<T>;\n isLoading: boolean;\n disabledKeys: Set<Key> = new Set();\n direction: Direction;\n scale: Scale;\n margin: number;\n\n constructor(options: BaseLayoutOptions = {}) {\n super();\n this.layoutInfos = new Map();\n this.collator = options.collator;\n this.lastCollection = null;\n this.scale = options.scale || 'medium';\n this.margin = options.margin || 24;\n }\n\n update(invalidationContext: InvalidationContext<CardViewLayoutOptions>) {\n this.collection = this.virtualizer.collection as GridCollection<T>;\n this.isLoading = invalidationContext.layoutOptions?.isLoading || false;\n this.direction = invalidationContext.layoutOptions?.direction || 'ltr';\n this.buildCollection(invalidationContext);\n\n // Remove layout info that doesn't exist in new collection\n if (this.lastCollection) {\n for (let key of this.lastCollection.getKeys()) {\n if (!this.collection.getItem(key)) {\n this.layoutInfos.delete(key);\n }\n }\n\n if (!this.isLoading) {\n this.layoutInfos.delete('loader');\n }\n\n if (this.collection.size > 0) {\n this.layoutInfos.delete('placeholder');\n }\n }\n\n this.lastCollection = this.collection;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n buildCollection(invalidationContext?: InvalidationContext) {}\n\n getContentSize() {\n return this.contentSize;\n }\n\n getLayoutInfo(key: Key) {\n return this.layoutInfos.get(key)!;\n }\n\n getVisibleLayoutInfos(rect: Rect, excludePersistedKeys = false) {\n let res: LayoutInfo[] = [];\n\n for (let layoutInfo of this.layoutInfos.values()) {\n if (this.isVisible(layoutInfo, rect, excludePersistedKeys)) {\n res.push(layoutInfo);\n }\n }\n\n return res;\n }\n\n isVisible(layoutInfo: LayoutInfo, rect: Rect, excludePersistedKeys: boolean) {\n if (layoutInfo.rect.intersects(rect)) {\n return true;\n }\n\n if (!excludePersistedKeys) {\n return this.virtualizer.isPersistedKey(layoutInfo.key);\n }\n\n return false;\n }\n\n _findClosestLayoutInfo(target: Rect, rect: Rect) {\n let layoutInfos = this.getVisibleLayoutInfos(rect, true);\n let best = null;\n let bestDistance = Infinity;\n\n // Calculates distance as the distance between the center of 2 rects.\n for (let cur of layoutInfos) {\n if (cur.type === 'item') {\n let curRect = cur.rect;\n let targetMidX = (target.x + target.maxX) / 2;\n let targetMidY = (target.y + target.maxY) / 2;\n let curMidX = (curRect.x + curRect.maxX) / 2;\n let curMidY = (curRect.y + curRect.maxY) / 2;\n let dist = Math.pow(targetMidX - curMidX, 2) + Math.pow(targetMidY - curMidY, 2);\n if (dist < bestDistance) {\n best = cur;\n bestDistance = dist;\n }\n }\n }\n\n return best;\n }\n\n _findClosest(target: Rect, rect: Rect) {\n let best = this._findClosestLayoutInfo(target, rect);\n return best || null;\n }\n\n getKeyBelow(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n let rect = new Rect(layoutInfo.rect.x, layoutInfo.rect.maxY + 1, layoutInfo.rect.width, this.virtualizer.visibleRect.height);\n let closestRow = this.collection.getItem(this._findClosest(layoutInfo.rect, rect)?.key);\n return getFirstItem(getChildNodes(closestRow, this.collection))?.key;\n }\n\n getKeyAbove(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n let rect = new Rect(layoutInfo.rect.x, 0, layoutInfo.rect.width, layoutInfo.rect.y - 1);\n let closestRow = this.collection.getItem(this._findClosest(layoutInfo.rect, rect)?.key);\n return getFirstItem(getChildNodes(closestRow, this.collection))?.key;\n }\n\n getKeyRightOf(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n key = this.direction === 'rtl' ? this.collection.getKeyBefore(parentRowKey) : this.collection.getKeyAfter(parentRowKey);\n\n while (key != null) {\n let item = this.collection.getItem(key);\n // Don't check if item is disabled because we want to be able to focus disabled items in a grid (double check this)\n if (item.type === 'item') {\n return getFirstItem(getChildNodes(item, this.collection))?.key;\n }\n key = this.direction === 'rtl' ? this.collection.getKeyBefore(key) : this.collection.getKeyAfter(key);\n }\n }\n\n getKeyLeftOf(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n key = this.direction === 'rtl' ? this.collection.getKeyAfter(parentRowKey) : this.collection.getKeyBefore(parentRowKey);\n while (key != null) {\n let item = this.collection.getItem(key);\n // Don't check if item is disabled because we want to be able to focus disabled items in a grid (double check this)\n if (item.type === 'item') {\n return getFirstItem(getChildNodes(item, this.collection))?.key;\n }\n\n key = this.direction === 'rtl' ? this.collection.getKeyAfter(key) : this.collection.getKeyBefore(key);\n }\n }\n\n getFirstKey() {\n let firstRow = this.collection.getItem(this.collection.getFirstKey());\n return getFirstItem(getChildNodes(firstRow, this.collection))?.key;\n }\n\n getLastKey() {\n let lastRow = this.collection.getItem(this.collection.getLastKey());\n return getFirstItem(getChildNodes(lastRow, this.collection))?.key;\n }\n\n // TODO: pretty unwieldy because it needs to bounce back and forth between the parent key and the child key\n // Perhaps have layoutInfo store childKey as well so we don't need to do this? Or maybe make the layoutInfos be the cells instead of the rows?\n getKeyPageAbove(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n\n if (layoutInfo) {\n let pageY = Math.max(0, layoutInfo.rect.y + layoutInfo.rect.height - this.virtualizer.visibleRect.height);\n // If the node is so large that it spans multiple page heights, return the key of the item immediately above\n // Otherwise keep going up until we exceed a single page height worth of nodes\n let keyAbove = this.collection.getItem(this.getKeyAbove(key))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyAbove);\n\n if (layoutInfo && layoutInfo.rect.y > pageY) {\n while (layoutInfo && layoutInfo.rect.y > pageY) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n let keyAbove = this.collection.getItem(this.getKeyAbove(childKey))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyAbove);\n }\n }\n\n if (layoutInfo) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n return childKey;\n }\n }\n\n return this.getFirstKey();\n }\n\n // TODO: pretty unwieldy because it needs to bounce back and forth between the parent key and the child key\n // Perhaps have layoutInfo store childKey as well so we don't need to do this?\n getKeyPageBelow(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n if (layoutInfo) {\n let pageY = Math.min(this.virtualizer.contentSize.height, layoutInfo.rect.y - layoutInfo.rect.height + this.virtualizer.visibleRect.height);\n // If the node is so large that it spans multiple page heights, return the key of the item immediately below\n // Otherwise keep going up until we exceed a single page height worth of nodes\n let keyBelow = this.collection.getItem(this.getKeyBelow(key))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyBelow);\n if (layoutInfo && layoutInfo.rect.y < pageY) {\n while (layoutInfo && layoutInfo.rect.y < pageY) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n let keyBelow = this.collection.getItem(this.getKeyBelow(childKey))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyBelow);\n }\n }\n\n if (layoutInfo) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n return childKey;\n }\n }\n\n return this.getLastKey();\n }\n\n getKeyForSearch(search: string, fromKey?: Key) {\n if (!this.collator) {\n return null;\n }\n\n let collection = this.collection;\n let key = fromKey ?? this.getFirstKey();\n\n let startItem = collection.getItem(key);\n key = startItem.parentKey;\n\n while (key != null) {\n let item = collection.getItem(key);\n if (item.textValue) {\n let substring = item.textValue.slice(0, search.length);\n if (this.collator.compare(substring, search) === 0) {\n return getFirstItem(getChildNodes(item, this.collection))?.key;\n }\n }\n\n key = this.collection.getKeyAfter(key);\n }\n\n return null;\n }\n}\n"],"names":[],"version":3,"file":"BaseLayout.main.js.map"}
@@ -14,14 +14,17 @@ import {Rect as $1JdnP$Rect, Layout as $1JdnP$Layout} from "@react-stately/virtu
14
14
  */
15
15
 
16
16
  class $3d424c147206bac9$export$64943d2e59d72a29 extends (0, $1JdnP$Layout) {
17
- validate(invalidationContext) {
17
+ update(invalidationContext) {
18
+ var _invalidationContext_layoutOptions, _invalidationContext_layoutOptions1;
18
19
  this.collection = this.virtualizer.collection;
20
+ this.isLoading = ((_invalidationContext_layoutOptions = invalidationContext.layoutOptions) === null || _invalidationContext_layoutOptions === void 0 ? void 0 : _invalidationContext_layoutOptions.isLoading) || false;
21
+ this.direction = ((_invalidationContext_layoutOptions1 = invalidationContext.layoutOptions) === null || _invalidationContext_layoutOptions1 === void 0 ? void 0 : _invalidationContext_layoutOptions1.direction) || 'ltr';
19
22
  this.buildCollection(invalidationContext);
20
23
  // Remove layout info that doesn't exist in new collection
21
24
  if (this.lastCollection) {
22
25
  for (let key of this.lastCollection.getKeys())if (!this.collection.getItem(key)) this.layoutInfos.delete(key);
23
- if (!this.isLoading) this.layoutInfos.delete("loader");
24
- if (this.collection.size > 0) this.layoutInfos.delete("placeholder");
26
+ if (!this.isLoading) this.layoutInfos.delete('loader');
27
+ if (this.collection.size > 0) this.layoutInfos.delete('placeholder');
25
28
  }
26
29
  this.lastCollection = this.collection;
27
30
  }
@@ -33,30 +36,22 @@ class $3d424c147206bac9$export$64943d2e59d72a29 extends (0, $1JdnP$Layout) {
33
36
  getLayoutInfo(key) {
34
37
  return this.layoutInfos.get(key);
35
38
  }
36
- getVisibleLayoutInfos(rect) {
39
+ getVisibleLayoutInfos(rect, excludePersistedKeys = false) {
37
40
  let res = [];
38
- for (let layoutInfo of this.layoutInfos.values())if (this.isVisible(layoutInfo, rect)) res.push(layoutInfo);
41
+ for (let layoutInfo of this.layoutInfos.values())if (this.isVisible(layoutInfo, rect, excludePersistedKeys)) res.push(layoutInfo);
39
42
  return res;
40
43
  }
41
- isVisible(layoutInfo, rect) {
42
- return layoutInfo.rect.intersects(rect);
43
- }
44
- getInitialLayoutInfo(layoutInfo) {
45
- layoutInfo.opacity = 0;
46
- layoutInfo.transform = "scale3d(0.8, 0.8, 0.8)";
47
- return layoutInfo;
48
- }
49
- getFinalLayoutInfo(layoutInfo) {
50
- layoutInfo.opacity = 0;
51
- layoutInfo.transform = "scale3d(0.8, 0.8, 0.8)";
52
- return layoutInfo;
44
+ isVisible(layoutInfo, rect, excludePersistedKeys) {
45
+ if (layoutInfo.rect.intersects(rect)) return true;
46
+ if (!excludePersistedKeys) return this.virtualizer.isPersistedKey(layoutInfo.key);
47
+ return false;
53
48
  }
54
49
  _findClosestLayoutInfo(target, rect) {
55
- let layoutInfos = this.getVisibleLayoutInfos(rect);
50
+ let layoutInfos = this.getVisibleLayoutInfos(rect, true);
56
51
  let best = null;
57
52
  let bestDistance = Infinity;
58
53
  // Calculates distance as the distance between the center of 2 rects.
59
- for (let cur of layoutInfos)if (cur.type === "item") {
54
+ for (let cur of layoutInfos)if (cur.type === 'item') {
60
55
  let curRect = cur.rect;
61
56
  let targetMidX = (target.x + target.maxX) / 2;
62
57
  let targetMidY = (target.y + target.maxY) / 2;
@@ -95,25 +90,25 @@ class $3d424c147206bac9$export$64943d2e59d72a29 extends (0, $1JdnP$Layout) {
95
90
  getKeyRightOf(key) {
96
91
  // Expected key is the currently focused cell so we need the parent row key
97
92
  let parentRowKey = this.collection.getItem(key).parentKey;
98
- key = this.direction === "rtl" ? this.collection.getKeyBefore(parentRowKey) : this.collection.getKeyAfter(parentRowKey);
93
+ key = this.direction === 'rtl' ? this.collection.getKeyBefore(parentRowKey) : this.collection.getKeyAfter(parentRowKey);
99
94
  while(key != null){
100
95
  var _getFirstItem;
101
96
  let item = this.collection.getItem(key);
102
97
  // Don't check if item is disabled because we want to be able to focus disabled items in a grid (double check this)
103
- if (item.type === "item") return (_getFirstItem = (0, $1JdnP$getFirstItem)((0, $1JdnP$getChildNodes)(item, this.collection))) === null || _getFirstItem === void 0 ? void 0 : _getFirstItem.key;
104
- key = this.direction === "rtl" ? this.collection.getKeyBefore(key) : this.collection.getKeyAfter(key);
98
+ if (item.type === 'item') return (_getFirstItem = (0, $1JdnP$getFirstItem)((0, $1JdnP$getChildNodes)(item, this.collection))) === null || _getFirstItem === void 0 ? void 0 : _getFirstItem.key;
99
+ key = this.direction === 'rtl' ? this.collection.getKeyBefore(key) : this.collection.getKeyAfter(key);
105
100
  }
106
101
  }
107
102
  getKeyLeftOf(key) {
108
103
  // Expected key is the currently focused cell so we need the parent row key
109
104
  let parentRowKey = this.collection.getItem(key).parentKey;
110
- key = this.direction === "rtl" ? this.collection.getKeyAfter(parentRowKey) : this.collection.getKeyBefore(parentRowKey);
105
+ key = this.direction === 'rtl' ? this.collection.getKeyAfter(parentRowKey) : this.collection.getKeyBefore(parentRowKey);
111
106
  while(key != null){
112
107
  var _getFirstItem;
113
108
  let item = this.collection.getItem(key);
114
109
  // Don't check if item is disabled because we want to be able to focus disabled items in a grid (double check this)
115
- if (item.type === "item") return (_getFirstItem = (0, $1JdnP$getFirstItem)((0, $1JdnP$getChildNodes)(item, this.collection))) === null || _getFirstItem === void 0 ? void 0 : _getFirstItem.key;
116
- key = this.direction === "rtl" ? this.collection.getKeyAfter(key) : this.collection.getKeyBefore(key);
110
+ if (item.type === 'item') return (_getFirstItem = (0, $1JdnP$getFirstItem)((0, $1JdnP$getChildNodes)(item, this.collection))) === null || _getFirstItem === void 0 ? void 0 : _getFirstItem.key;
111
+ key = this.direction === 'rtl' ? this.collection.getKeyAfter(key) : this.collection.getKeyBefore(key);
117
112
  }
118
113
  }
119
114
  getFirstKey() {
@@ -203,11 +198,11 @@ class $3d424c147206bac9$export$64943d2e59d72a29 extends (0, $1JdnP$Layout) {
203
198
  this.layoutInfos = new Map();
204
199
  this.collator = options.collator;
205
200
  this.lastCollection = null;
206
- this.scale = options.scale || "medium";
201
+ this.scale = options.scale || 'medium';
207
202
  this.margin = options.margin || 24;
208
203
  }
209
204
  }
210
205
 
211
206
 
212
207
  export {$3d424c147206bac9$export$64943d2e59d72a29 as BaseLayout};
213
- //# sourceMappingURL=BaseLayout.mjs.map
208
+ //# sourceMappingURL=BaseLayout.module.js.map
@@ -14,14 +14,17 @@ import {Rect as $1JdnP$Rect, Layout as $1JdnP$Layout} from "@react-stately/virtu
14
14
  */
15
15
 
16
16
  class $3d424c147206bac9$export$64943d2e59d72a29 extends (0, $1JdnP$Layout) {
17
- validate(invalidationContext) {
17
+ update(invalidationContext) {
18
+ var _invalidationContext_layoutOptions, _invalidationContext_layoutOptions1;
18
19
  this.collection = this.virtualizer.collection;
20
+ this.isLoading = ((_invalidationContext_layoutOptions = invalidationContext.layoutOptions) === null || _invalidationContext_layoutOptions === void 0 ? void 0 : _invalidationContext_layoutOptions.isLoading) || false;
21
+ this.direction = ((_invalidationContext_layoutOptions1 = invalidationContext.layoutOptions) === null || _invalidationContext_layoutOptions1 === void 0 ? void 0 : _invalidationContext_layoutOptions1.direction) || 'ltr';
19
22
  this.buildCollection(invalidationContext);
20
23
  // Remove layout info that doesn't exist in new collection
21
24
  if (this.lastCollection) {
22
25
  for (let key of this.lastCollection.getKeys())if (!this.collection.getItem(key)) this.layoutInfos.delete(key);
23
- if (!this.isLoading) this.layoutInfos.delete("loader");
24
- if (this.collection.size > 0) this.layoutInfos.delete("placeholder");
26
+ if (!this.isLoading) this.layoutInfos.delete('loader');
27
+ if (this.collection.size > 0) this.layoutInfos.delete('placeholder');
25
28
  }
26
29
  this.lastCollection = this.collection;
27
30
  }
@@ -33,30 +36,22 @@ class $3d424c147206bac9$export$64943d2e59d72a29 extends (0, $1JdnP$Layout) {
33
36
  getLayoutInfo(key) {
34
37
  return this.layoutInfos.get(key);
35
38
  }
36
- getVisibleLayoutInfos(rect) {
39
+ getVisibleLayoutInfos(rect, excludePersistedKeys = false) {
37
40
  let res = [];
38
- for (let layoutInfo of this.layoutInfos.values())if (this.isVisible(layoutInfo, rect)) res.push(layoutInfo);
41
+ for (let layoutInfo of this.layoutInfos.values())if (this.isVisible(layoutInfo, rect, excludePersistedKeys)) res.push(layoutInfo);
39
42
  return res;
40
43
  }
41
- isVisible(layoutInfo, rect) {
42
- return layoutInfo.rect.intersects(rect);
43
- }
44
- getInitialLayoutInfo(layoutInfo) {
45
- layoutInfo.opacity = 0;
46
- layoutInfo.transform = "scale3d(0.8, 0.8, 0.8)";
47
- return layoutInfo;
48
- }
49
- getFinalLayoutInfo(layoutInfo) {
50
- layoutInfo.opacity = 0;
51
- layoutInfo.transform = "scale3d(0.8, 0.8, 0.8)";
52
- return layoutInfo;
44
+ isVisible(layoutInfo, rect, excludePersistedKeys) {
45
+ if (layoutInfo.rect.intersects(rect)) return true;
46
+ if (!excludePersistedKeys) return this.virtualizer.isPersistedKey(layoutInfo.key);
47
+ return false;
53
48
  }
54
49
  _findClosestLayoutInfo(target, rect) {
55
- let layoutInfos = this.getVisibleLayoutInfos(rect);
50
+ let layoutInfos = this.getVisibleLayoutInfos(rect, true);
56
51
  let best = null;
57
52
  let bestDistance = Infinity;
58
53
  // Calculates distance as the distance between the center of 2 rects.
59
- for (let cur of layoutInfos)if (cur.type === "item") {
54
+ for (let cur of layoutInfos)if (cur.type === 'item') {
60
55
  let curRect = cur.rect;
61
56
  let targetMidX = (target.x + target.maxX) / 2;
62
57
  let targetMidY = (target.y + target.maxY) / 2;
@@ -95,25 +90,25 @@ class $3d424c147206bac9$export$64943d2e59d72a29 extends (0, $1JdnP$Layout) {
95
90
  getKeyRightOf(key) {
96
91
  // Expected key is the currently focused cell so we need the parent row key
97
92
  let parentRowKey = this.collection.getItem(key).parentKey;
98
- key = this.direction === "rtl" ? this.collection.getKeyBefore(parentRowKey) : this.collection.getKeyAfter(parentRowKey);
93
+ key = this.direction === 'rtl' ? this.collection.getKeyBefore(parentRowKey) : this.collection.getKeyAfter(parentRowKey);
99
94
  while(key != null){
100
95
  var _getFirstItem;
101
96
  let item = this.collection.getItem(key);
102
97
  // Don't check if item is disabled because we want to be able to focus disabled items in a grid (double check this)
103
- if (item.type === "item") return (_getFirstItem = (0, $1JdnP$getFirstItem)((0, $1JdnP$getChildNodes)(item, this.collection))) === null || _getFirstItem === void 0 ? void 0 : _getFirstItem.key;
104
- key = this.direction === "rtl" ? this.collection.getKeyBefore(key) : this.collection.getKeyAfter(key);
98
+ if (item.type === 'item') return (_getFirstItem = (0, $1JdnP$getFirstItem)((0, $1JdnP$getChildNodes)(item, this.collection))) === null || _getFirstItem === void 0 ? void 0 : _getFirstItem.key;
99
+ key = this.direction === 'rtl' ? this.collection.getKeyBefore(key) : this.collection.getKeyAfter(key);
105
100
  }
106
101
  }
107
102
  getKeyLeftOf(key) {
108
103
  // Expected key is the currently focused cell so we need the parent row key
109
104
  let parentRowKey = this.collection.getItem(key).parentKey;
110
- key = this.direction === "rtl" ? this.collection.getKeyAfter(parentRowKey) : this.collection.getKeyBefore(parentRowKey);
105
+ key = this.direction === 'rtl' ? this.collection.getKeyAfter(parentRowKey) : this.collection.getKeyBefore(parentRowKey);
111
106
  while(key != null){
112
107
  var _getFirstItem;
113
108
  let item = this.collection.getItem(key);
114
109
  // Don't check if item is disabled because we want to be able to focus disabled items in a grid (double check this)
115
- if (item.type === "item") return (_getFirstItem = (0, $1JdnP$getFirstItem)((0, $1JdnP$getChildNodes)(item, this.collection))) === null || _getFirstItem === void 0 ? void 0 : _getFirstItem.key;
116
- key = this.direction === "rtl" ? this.collection.getKeyAfter(key) : this.collection.getKeyBefore(key);
110
+ if (item.type === 'item') return (_getFirstItem = (0, $1JdnP$getFirstItem)((0, $1JdnP$getChildNodes)(item, this.collection))) === null || _getFirstItem === void 0 ? void 0 : _getFirstItem.key;
111
+ key = this.direction === 'rtl' ? this.collection.getKeyAfter(key) : this.collection.getKeyBefore(key);
117
112
  }
118
113
  }
119
114
  getFirstKey() {
@@ -203,7 +198,7 @@ class $3d424c147206bac9$export$64943d2e59d72a29 extends (0, $1JdnP$Layout) {
203
198
  this.layoutInfos = new Map();
204
199
  this.collator = options.collator;
205
200
  this.lastCollection = null;
206
- this.scale = options.scale || "medium";
201
+ this.scale = options.scale || 'medium';
207
202
  this.margin = options.margin || 24;
208
203
  }
209
204
  }
@@ -1 +1 @@
1
- {"mappings":";;;AAAA;;;;;;;;;;CAUC;;AAmBM,MAAM,kDAAsB,CAAA,GAAA,aAAK;IAqBtC,SAAS,mBAA0D,EAAE;QACnE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU;QAC7C,IAAI,CAAC,eAAe,CAAC;QAErB,0DAA0D;QAC1D,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,KAAK,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,GACzC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAI5B,IAAI,CAAC,IAAI,CAAC,SAAS,EACjB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAG1B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,GACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAE5B;QAEA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU;IACvC;IAEA,6DAA6D;IAC7D,gBAAgB,mBAA2D,EAAE,CAAC;IAE9E,iBAAiB;QACf,OAAO,IAAI,CAAC,WAAW;IACzB;IAEA,cAAc,GAAQ,EAAE;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;IAC9B;IAEA,sBAAsB,IAAI,EAAE;QAC1B,IAAI,MAAoB,EAAE;QAE1B,KAAK,IAAI,cAAc,IAAI,CAAC,WAAW,CAAC,MAAM,GAC5C,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,OAC7B,IAAI,IAAI,CAAC;QAIb,OAAO;IACT;IAEA,UAAU,UAAsB,EAAE,IAAU,EAAE;QAC5C,OAAO,WAAW,IAAI,CAAC,UAAU,CAAC;IACpC;IAEA,qBAAqB,UAAsB,EAAE;QAC3C,WAAW,OAAO,GAAG;QACrB,WAAW,SAAS,GAAG;QACvB,OAAO;IACT;IAEA,mBAAmB,UAAsB,EAAE;QACzC,WAAW,OAAO,GAAG;QACrB,WAAW,SAAS,GAAG;QACvB,OAAO;IACT;IAEA,uBAAuB,MAAY,EAAE,IAAU,EAAE;QAC/C,IAAI,cAAc,IAAI,CAAC,qBAAqB,CAAC;QAC7C,IAAI,OAAO;QACX,IAAI,eAAe;QAEnB,qEAAqE;QACrE,KAAK,IAAI,OAAO,YACd,IAAI,IAAI,IAAI,KAAK,QAAQ;YACvB,IAAI,UAAU,IAAI,IAAI;YACtB,IAAI,aAAa,AAAC,CAAA,OAAO,CAAC,GAAG,OAAO,IAAI,AAAD,IAAK;YAC5C,IAAI,aAAa,AAAC,CAAA,OAAO,CAAC,GAAG,OAAO,IAAI,AAAD,IAAK;YAC5C,IAAI,UAAU,AAAC,CAAA,QAAQ,CAAC,GAAG,QAAQ,IAAI,AAAD,IAAK;YAC3C,IAAI,UAAU,AAAC,CAAA,QAAQ,CAAC,GAAG,QAAQ,IAAI,AAAD,IAAK;YAC3C,IAAI,OAAO,KAAK,GAAG,CAAC,aAAa,SAAS,KAAK,KAAK,GAAG,CAAC,aAAa,SAAS;YAC9E,IAAI,OAAO,cAAc;gBACvB,OAAO;gBACP,eAAe;YACjB;QACF;QAGF,OAAO;IACT;IAEA,aAAa,MAAY,EAAE,IAAU,EAAE;QACrC,IAAI,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ;QAC/C,OAAO,QAAQ;IACjB;IAEA,YAAY,GAAQ,EAAE;YAKqB,oBAClC;QALP,2EAA2E;QAC3E,IAAI,eAAe,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,SAAS;QACzD,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC;QACpC,IAAI,OAAO,IAAI,CAAA,GAAA,WAAG,EAAE,WAAW,IAAI,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,IAAI,GAAG,GAAG,WAAW,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM;QAC3H,IAAI,aAAa,IAAI,CAAC,UAAU,CAAC,OAAO,EAAC,qBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,EAAE,mBAAnC,yCAAA,mBAA0C,GAAG;QACtF,QAAO,gBAAA,CAAA,GAAA,mBAAW,EAAE,CAAA,GAAA,oBAAY,EAAE,YAAY,IAAI,CAAC,UAAU,gBAAtD,oCAAA,cAA0D,GAAG;IACtE;IAEA,YAAY,GAAQ,EAAE;YAKqB,oBAClC;QALP,2EAA2E;QAC3E,IAAI,eAAe,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,SAAS;QACzD,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC;QACpC,IAAI,OAAO,IAAI,CAAA,GAAA,WAAG,EAAE,WAAW,IAAI,CAAC,CAAC,EAAE,GAAG,WAAW,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC,GAAG;QACrF,IAAI,aAAa,IAAI,CAAC,UAAU,CAAC,OAAO,EAAC,qBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,EAAE,mBAAnC,yCAAA,mBAA0C,GAAG;QACtF,QAAO,gBAAA,CAAA,GAAA,mBAAW,EAAE,CAAA,GAAA,oBAAY,EAAE,YAAY,IAAI,CAAC,UAAU,gBAAtD,oCAAA,cAA0D,GAAG;IACtE;IAEA,cAAc,GAAQ,EAAE;QACtB,2EAA2E;QAC3E,IAAI,eAAe,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,SAAS;QACzD,MAAM,IAAI,CAAC,SAAS,KAAK,QAAS,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,gBAAgB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAE3G,MAAO,OAAO,KAAM;gBAIT;YAHT,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YACnC,mHAAmH;YACnH,IAAI,KAAK,IAAI,KAAK,QAChB,QAAO,gBAAA,CAAA,GAAA,mBAAW,EAAE,CAAA,GAAA,oBAAY,EAAE,MAAM,IAAI,CAAC,UAAU,gBAAhD,oCAAA,cAAoD,GAAG;YAEhE,MAAM,IAAI,CAAC,SAAS,KAAK,QAAS,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QACpG;IACF;IAEA,aAAa,GAAQ,EAAE;QACrB,2EAA2E;QAC3E,IAAI,eAAe,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,SAAS;QACzD,MAAM,IAAI,CAAC,SAAS,KAAK,QAAS,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,gBAAgB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAC3G,MAAO,OAAO,KAAM;gBAIT;YAHT,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YACnC,mHAAmH;YACnH,IAAI,KAAK,IAAI,KAAK,QAChB,QAAO,gBAAA,CAAA,GAAA,mBAAW,EAAE,CAAA,GAAA,oBAAY,EAAE,MAAM,IAAI,CAAC,UAAU,gBAAhD,oCAAA,cAAoD,GAAG;YAGhE,MAAM,IAAI,CAAC,SAAS,KAAK,QAAS,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QACpG;IACF;IAEA,cAAc;YAEL;QADP,IAAI,WAAW,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW;QAClE,QAAO,gBAAA,CAAA,GAAA,mBAAW,EAAE,CAAA,GAAA,oBAAY,EAAE,UAAU,IAAI,CAAC,UAAU,gBAApD,oCAAA,cAAwD,GAAG;IACpE;IAEA,aAAa;YAEJ;QADP,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU;QAChE,QAAO,gBAAA,CAAA,GAAA,mBAAW,EAAE,CAAA,GAAA,oBAAY,EAAE,SAAS,IAAI,CAAC,UAAU,gBAAnD,oCAAA,cAAuD,GAAG;IACnE;IAEA,2GAA2G;IAC3G,8IAA8I;IAC9I,gBAAgB,GAAQ,EAAE;QACxB,2EAA2E;QAC3E,IAAI,eAAe,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,SAAS;QACzD,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC;QAEpC,IAAI,YAAY;gBAIC;YAHf,IAAI,QAAQ,KAAK,GAAG,CAAC,GAAG,WAAW,IAAI,CAAC,CAAC,GAAG,WAAW,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM;YACxG,4GAA4G;YAC5G,8EAA8E;YAC9E,IAAI,YAAW,2BAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAzC,+CAAA,yBAAgD,SAAS;YACxE,aAAa,IAAI,CAAC,aAAa,CAAC;YAEhC,IAAI,cAAc,WAAW,IAAI,CAAC,CAAC,GAAG,OACpC,MAAO,cAAc,WAAW,IAAI,CAAC,CAAC,GAAG,MAAO;oBAC/B,eACA;gBADf,IAAI,YAAW,gBAAA,CAAA,GAAA,mBAAW,EAAE,CAAA,GAAA,oBAAY,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC,UAAU,gBAAnF,oCAAA,cAAuF,GAAG;gBACzG,IAAI,YAAW,4BAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,wBAAzC,gDAAA,0BAAqD,SAAS;gBAC7E,aAAa,IAAI,CAAC,aAAa,CAAC;YAClC;YAGF,IAAI,YAAY;oBACC;gBAAf,IAAI,YAAW,iBAAA,CAAA,GAAA,mBAAW,EAAE,CAAA,GAAA,oBAAY,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC,UAAU,gBAAnF,qCAAA,eAAuF,GAAG;gBACzG,OAAO;YACT;QACF;QAEA,OAAO,IAAI,CAAC,WAAW;IACzB;IAEA,2GAA2G;IAC3G,8EAA8E;IAC9E,gBAAgB,GAAQ,EAAE;QACxB,2EAA2E;QAC3E,IAAI,eAAe,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,SAAS;QACzD,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC;QACpC,IAAI,YAAY;gBAIE;YAHhB,IAAI,QAAQ,KAAK,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,IAAI,CAAC,CAAC,GAAG,WAAW,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM;YAC1I,4GAA4G;YAC5G,8EAA8E;YAC9E,IAAI,YAAY,2BAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAzC,+CAAA,yBAAgD,SAAS;YACzE,aAAa,IAAI,CAAC,aAAa,CAAC;YAChC,IAAI,cAAc,WAAW,IAAI,CAAC,CAAC,GAAG,OACpC,MAAO,cAAc,WAAW,IAAI,CAAC,CAAC,GAAG,MAAO;oBAC/B,eACA;gBADf,IAAI,YAAW,gBAAA,CAAA,GAAA,mBAAW,EAAE,CAAA,GAAA,oBAAY,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC,UAAU,gBAAnF,oCAAA,cAAuF,GAAG;gBACzG,IAAI,YAAW,4BAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,wBAAzC,gDAAA,0BAAqD,SAAS;gBAC7E,aAAa,IAAI,CAAC,aAAa,CAAC;YAClC;YAGF,IAAI,YAAY;oBACC;gBAAf,IAAI,YAAW,iBAAA,CAAA,GAAA,mBAAW,EAAE,CAAA,GAAA,oBAAY,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC,UAAU,gBAAnF,qCAAA,eAAuF,GAAG;gBACzG,OAAO;YACT;QACF;QAEA,OAAO,IAAI,CAAC,UAAU;IACxB;IAEA,gBAAgB,MAAc,EAAE,OAAa,EAAE;QAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAChB,OAAO;QAGT,IAAI,aAAa,IAAI,CAAC,UAAU;QAChC,IAAI,MAAM,oBAAA,qBAAA,UAAW,IAAI,CAAC,WAAW;QAErC,IAAI,YAAY,WAAW,OAAO,CAAC;QACnC,MAAM,UAAU,SAAS;QAEzB,MAAO,OAAO,KAAM;YAClB,IAAI,OAAO,WAAW,OAAO,CAAC;YAC9B,IAAI,KAAK,SAAS,EAAE;oBAGT;gBAFT,IAAI,YAAY,KAAK,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,MAAM;gBACrD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,YAAY,GAC/C,QAAO,gBAAA,CAAA,GAAA,mBAAW,EAAE,CAAA,GAAA,oBAAY,EAAE,MAAM,IAAI,CAAC,UAAU,gBAAhD,oCAAA,cAAoD,GAAG;YAElE;YAEA,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QACpC;QAEA,OAAO;IACT;IAnPA,YAAY,UAA6B,CAAC,CAAC,CAAE;QAC3C,KAAK;aANP,eAAyB,IAAI;QAO3B,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,QAAQ;QAChC,IAAI,CAAC,cAAc,GAAG;QACtB,IAAI,CAAC,KAAK,GAAG,QAAQ,KAAK,IAAI;QAC9B,IAAI,CAAC,MAAM,GAAG,QAAQ,MAAM,IAAI;IAClC;AA6OF","sources":["packages/@react-spectrum/card/src/BaseLayout.tsx"],"sourcesContent":["/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Direction, Key, KeyboardDelegate, Node} from '@react-types/shared';\nimport {getChildNodes, getFirstItem} from '@react-stately/collections';\nimport {GridCollection} from '@react-stately/grid';\nimport {InvalidationContext, Layout, LayoutInfo, Rect, Size} from '@react-stately/virtualizer';\nimport {Scale} from '@react-types/provider';\n\nexport interface BaseLayoutOptions {\n collator?: Intl.Collator,\n // TODO: is this valid or is scale a spectrum specific thing that should be left out of the layouts?\n scale?: Scale,\n /**\n * The margin around the grid view between the edges and the items.\n * @default 24\n */\n margin?: number\n}\n\nexport class BaseLayout<T> extends Layout<Node<T>> implements KeyboardDelegate {\n protected contentSize: Size;\n protected layoutInfos: Map<Key, LayoutInfo>;\n protected collator: Intl.Collator;\n protected lastCollection: GridCollection<T>;\n collection: GridCollection<T>;\n isLoading: boolean;\n disabledKeys: Set<Key> = new Set();\n direction: Direction;\n scale: Scale;\n margin: number;\n\n constructor(options: BaseLayoutOptions = {}) {\n super();\n this.layoutInfos = new Map();\n this.collator = options.collator;\n this.lastCollection = null;\n this.scale = options.scale || 'medium';\n this.margin = options.margin || 24;\n }\n\n validate(invalidationContext: InvalidationContext<Node<T>, unknown>) {\n this.collection = this.virtualizer.collection as GridCollection<T>;\n this.buildCollection(invalidationContext);\n\n // Remove layout info that doesn't exist in new collection\n if (this.lastCollection) {\n for (let key of this.lastCollection.getKeys()) {\n if (!this.collection.getItem(key)) {\n this.layoutInfos.delete(key);\n }\n }\n\n if (!this.isLoading) {\n this.layoutInfos.delete('loader');\n }\n\n if (this.collection.size > 0) {\n this.layoutInfos.delete('placeholder');\n }\n }\n\n this.lastCollection = this.collection;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n buildCollection(invalidationContext?: InvalidationContext<Node<T>, unknown>) {}\n\n getContentSize() {\n return this.contentSize;\n }\n\n getLayoutInfo(key: Key) {\n return this.layoutInfos.get(key);\n }\n\n getVisibleLayoutInfos(rect) {\n let res: LayoutInfo[] = [];\n\n for (let layoutInfo of this.layoutInfos.values()) {\n if (this.isVisible(layoutInfo, rect)) {\n res.push(layoutInfo);\n }\n }\n\n return res;\n }\n\n isVisible(layoutInfo: LayoutInfo, rect: Rect) {\n return layoutInfo.rect.intersects(rect);\n }\n\n getInitialLayoutInfo(layoutInfo: LayoutInfo) {\n layoutInfo.opacity = 0;\n layoutInfo.transform = 'scale3d(0.8, 0.8, 0.8)';\n return layoutInfo;\n }\n\n getFinalLayoutInfo(layoutInfo: LayoutInfo) {\n layoutInfo.opacity = 0;\n layoutInfo.transform = 'scale3d(0.8, 0.8, 0.8)';\n return layoutInfo;\n }\n\n _findClosestLayoutInfo(target: Rect, rect: Rect) {\n let layoutInfos = this.getVisibleLayoutInfos(rect);\n let best = null;\n let bestDistance = Infinity;\n\n // Calculates distance as the distance between the center of 2 rects.\n for (let cur of layoutInfos) {\n if (cur.type === 'item') {\n let curRect = cur.rect;\n let targetMidX = (target.x + target.maxX) / 2;\n let targetMidY = (target.y + target.maxY) / 2;\n let curMidX = (curRect.x + curRect.maxX) / 2;\n let curMidY = (curRect.y + curRect.maxY) / 2;\n let dist = Math.pow(targetMidX - curMidX, 2) + Math.pow(targetMidY - curMidY, 2);\n if (dist < bestDistance) {\n best = cur;\n bestDistance = dist;\n }\n }\n }\n\n return best;\n }\n\n _findClosest(target: Rect, rect: Rect) {\n let best = this._findClosestLayoutInfo(target, rect);\n return best || null;\n }\n\n getKeyBelow(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n let rect = new Rect(layoutInfo.rect.x, layoutInfo.rect.maxY + 1, layoutInfo.rect.width, this.virtualizer.visibleRect.height);\n let closestRow = this.collection.getItem(this._findClosest(layoutInfo.rect, rect)?.key);\n return getFirstItem(getChildNodes(closestRow, this.collection))?.key;\n }\n\n getKeyAbove(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n let rect = new Rect(layoutInfo.rect.x, 0, layoutInfo.rect.width, layoutInfo.rect.y - 1);\n let closestRow = this.collection.getItem(this._findClosest(layoutInfo.rect, rect)?.key);\n return getFirstItem(getChildNodes(closestRow, this.collection))?.key;\n }\n\n getKeyRightOf(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n key = this.direction === 'rtl' ? this.collection.getKeyBefore(parentRowKey) : this.collection.getKeyAfter(parentRowKey);\n\n while (key != null) {\n let item = this.collection.getItem(key);\n // Don't check if item is disabled because we want to be able to focus disabled items in a grid (double check this)\n if (item.type === 'item') {\n return getFirstItem(getChildNodes(item, this.collection))?.key;\n }\n key = this.direction === 'rtl' ? this.collection.getKeyBefore(key) : this.collection.getKeyAfter(key);\n }\n }\n\n getKeyLeftOf(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n key = this.direction === 'rtl' ? this.collection.getKeyAfter(parentRowKey) : this.collection.getKeyBefore(parentRowKey);\n while (key != null) {\n let item = this.collection.getItem(key);\n // Don't check if item is disabled because we want to be able to focus disabled items in a grid (double check this)\n if (item.type === 'item') {\n return getFirstItem(getChildNodes(item, this.collection))?.key;\n }\n\n key = this.direction === 'rtl' ? this.collection.getKeyAfter(key) : this.collection.getKeyBefore(key);\n }\n }\n\n getFirstKey() {\n let firstRow = this.collection.getItem(this.collection.getFirstKey());\n return getFirstItem(getChildNodes(firstRow, this.collection))?.key;\n }\n\n getLastKey() {\n let lastRow = this.collection.getItem(this.collection.getLastKey());\n return getFirstItem(getChildNodes(lastRow, this.collection))?.key;\n }\n\n // TODO: pretty unwieldy because it needs to bounce back and forth between the parent key and the child key\n // Perhaps have layoutInfo store childKey as well so we don't need to do this? Or maybe make the layoutInfos be the cells instead of the rows?\n getKeyPageAbove(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n\n if (layoutInfo) {\n let pageY = Math.max(0, layoutInfo.rect.y + layoutInfo.rect.height - this.virtualizer.visibleRect.height);\n // If the node is so large that it spans multiple page heights, return the key of the item immediately above\n // Otherwise keep going up until we exceed a single page height worth of nodes\n let keyAbove = this.collection.getItem(this.getKeyAbove(key))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyAbove);\n\n if (layoutInfo && layoutInfo.rect.y > pageY) {\n while (layoutInfo && layoutInfo.rect.y > pageY) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n let keyAbove = this.collection.getItem(this.getKeyAbove(childKey))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyAbove);\n }\n }\n\n if (layoutInfo) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n return childKey;\n }\n }\n\n return this.getFirstKey();\n }\n\n // TODO: pretty unwieldy because it needs to bounce back and forth between the parent key and the child key\n // Perhaps have layoutInfo store childKey as well so we don't need to do this?\n getKeyPageBelow(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n if (layoutInfo) {\n let pageY = Math.min(this.virtualizer.contentSize.height, layoutInfo.rect.y - layoutInfo.rect.height + this.virtualizer.visibleRect.height);\n // If the node is so large that it spans multiple page heights, return the key of the item immediately below\n // Otherwise keep going up until we exceed a single page height worth of nodes\n let keyBelow = this.collection.getItem(this.getKeyBelow(key))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyBelow);\n if (layoutInfo && layoutInfo.rect.y < pageY) {\n while (layoutInfo && layoutInfo.rect.y < pageY) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n let keyBelow = this.collection.getItem(this.getKeyBelow(childKey))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyBelow);\n }\n }\n\n if (layoutInfo) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n return childKey;\n }\n }\n\n return this.getLastKey();\n }\n\n getKeyForSearch(search: string, fromKey?: Key) {\n if (!this.collator) {\n return null;\n }\n\n let collection = this.collection;\n let key = fromKey ?? this.getFirstKey();\n\n let startItem = collection.getItem(key);\n key = startItem.parentKey;\n\n while (key != null) {\n let item = collection.getItem(key);\n if (item.textValue) {\n let substring = item.textValue.slice(0, search.length);\n if (this.collator.compare(substring, search) === 0) {\n return getFirstItem(getChildNodes(item, this.collection))?.key;\n }\n }\n\n key = this.collection.getKeyAfter(key);\n }\n\n return null;\n }\n}\n"],"names":[],"version":3,"file":"BaseLayout.module.js.map"}
1
+ {"mappings":"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","sources":["packages/@react-spectrum/card/src/BaseLayout.tsx"],"sourcesContent":["/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Direction, Key, KeyboardDelegate, Node} from '@react-types/shared';\nimport {getChildNodes, getFirstItem} from '@react-stately/collections';\nimport {GridCollection} from '@react-stately/grid';\nimport {InvalidationContext, Layout, LayoutInfo, Rect, Size} from '@react-stately/virtualizer';\nimport {Scale} from '@react-types/provider';\n\nexport interface BaseLayoutOptions {\n collator?: Intl.Collator,\n // TODO: is this valid or is scale a spectrum specific thing that should be left out of the layouts?\n scale?: Scale,\n /**\n * The margin around the grid view between the edges and the items.\n * @default 24\n */\n margin?: number\n}\n\ninterface CardViewLayoutOptions {\n isLoading: boolean,\n direction: Direction\n}\n\nexport class BaseLayout<T> extends Layout<Node<T>, CardViewLayoutOptions> implements KeyboardDelegate {\n protected contentSize: Size;\n protected layoutInfos: Map<Key, LayoutInfo>;\n protected collator: Intl.Collator;\n protected lastCollection: GridCollection<T>;\n collection: GridCollection<T>;\n isLoading: boolean;\n disabledKeys: Set<Key> = new Set();\n direction: Direction;\n scale: Scale;\n margin: number;\n\n constructor(options: BaseLayoutOptions = {}) {\n super();\n this.layoutInfos = new Map();\n this.collator = options.collator;\n this.lastCollection = null;\n this.scale = options.scale || 'medium';\n this.margin = options.margin || 24;\n }\n\n update(invalidationContext: InvalidationContext<CardViewLayoutOptions>) {\n this.collection = this.virtualizer.collection as GridCollection<T>;\n this.isLoading = invalidationContext.layoutOptions?.isLoading || false;\n this.direction = invalidationContext.layoutOptions?.direction || 'ltr';\n this.buildCollection(invalidationContext);\n\n // Remove layout info that doesn't exist in new collection\n if (this.lastCollection) {\n for (let key of this.lastCollection.getKeys()) {\n if (!this.collection.getItem(key)) {\n this.layoutInfos.delete(key);\n }\n }\n\n if (!this.isLoading) {\n this.layoutInfos.delete('loader');\n }\n\n if (this.collection.size > 0) {\n this.layoutInfos.delete('placeholder');\n }\n }\n\n this.lastCollection = this.collection;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n buildCollection(invalidationContext?: InvalidationContext) {}\n\n getContentSize() {\n return this.contentSize;\n }\n\n getLayoutInfo(key: Key) {\n return this.layoutInfos.get(key)!;\n }\n\n getVisibleLayoutInfos(rect: Rect, excludePersistedKeys = false) {\n let res: LayoutInfo[] = [];\n\n for (let layoutInfo of this.layoutInfos.values()) {\n if (this.isVisible(layoutInfo, rect, excludePersistedKeys)) {\n res.push(layoutInfo);\n }\n }\n\n return res;\n }\n\n isVisible(layoutInfo: LayoutInfo, rect: Rect, excludePersistedKeys: boolean) {\n if (layoutInfo.rect.intersects(rect)) {\n return true;\n }\n\n if (!excludePersistedKeys) {\n return this.virtualizer.isPersistedKey(layoutInfo.key);\n }\n\n return false;\n }\n\n _findClosestLayoutInfo(target: Rect, rect: Rect) {\n let layoutInfos = this.getVisibleLayoutInfos(rect, true);\n let best = null;\n let bestDistance = Infinity;\n\n // Calculates distance as the distance between the center of 2 rects.\n for (let cur of layoutInfos) {\n if (cur.type === 'item') {\n let curRect = cur.rect;\n let targetMidX = (target.x + target.maxX) / 2;\n let targetMidY = (target.y + target.maxY) / 2;\n let curMidX = (curRect.x + curRect.maxX) / 2;\n let curMidY = (curRect.y + curRect.maxY) / 2;\n let dist = Math.pow(targetMidX - curMidX, 2) + Math.pow(targetMidY - curMidY, 2);\n if (dist < bestDistance) {\n best = cur;\n bestDistance = dist;\n }\n }\n }\n\n return best;\n }\n\n _findClosest(target: Rect, rect: Rect) {\n let best = this._findClosestLayoutInfo(target, rect);\n return best || null;\n }\n\n getKeyBelow(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n let rect = new Rect(layoutInfo.rect.x, layoutInfo.rect.maxY + 1, layoutInfo.rect.width, this.virtualizer.visibleRect.height);\n let closestRow = this.collection.getItem(this._findClosest(layoutInfo.rect, rect)?.key);\n return getFirstItem(getChildNodes(closestRow, this.collection))?.key;\n }\n\n getKeyAbove(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n let rect = new Rect(layoutInfo.rect.x, 0, layoutInfo.rect.width, layoutInfo.rect.y - 1);\n let closestRow = this.collection.getItem(this._findClosest(layoutInfo.rect, rect)?.key);\n return getFirstItem(getChildNodes(closestRow, this.collection))?.key;\n }\n\n getKeyRightOf(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n key = this.direction === 'rtl' ? this.collection.getKeyBefore(parentRowKey) : this.collection.getKeyAfter(parentRowKey);\n\n while (key != null) {\n let item = this.collection.getItem(key);\n // Don't check if item is disabled because we want to be able to focus disabled items in a grid (double check this)\n if (item.type === 'item') {\n return getFirstItem(getChildNodes(item, this.collection))?.key;\n }\n key = this.direction === 'rtl' ? this.collection.getKeyBefore(key) : this.collection.getKeyAfter(key);\n }\n }\n\n getKeyLeftOf(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n key = this.direction === 'rtl' ? this.collection.getKeyAfter(parentRowKey) : this.collection.getKeyBefore(parentRowKey);\n while (key != null) {\n let item = this.collection.getItem(key);\n // Don't check if item is disabled because we want to be able to focus disabled items in a grid (double check this)\n if (item.type === 'item') {\n return getFirstItem(getChildNodes(item, this.collection))?.key;\n }\n\n key = this.direction === 'rtl' ? this.collection.getKeyAfter(key) : this.collection.getKeyBefore(key);\n }\n }\n\n getFirstKey() {\n let firstRow = this.collection.getItem(this.collection.getFirstKey());\n return getFirstItem(getChildNodes(firstRow, this.collection))?.key;\n }\n\n getLastKey() {\n let lastRow = this.collection.getItem(this.collection.getLastKey());\n return getFirstItem(getChildNodes(lastRow, this.collection))?.key;\n }\n\n // TODO: pretty unwieldy because it needs to bounce back and forth between the parent key and the child key\n // Perhaps have layoutInfo store childKey as well so we don't need to do this? Or maybe make the layoutInfos be the cells instead of the rows?\n getKeyPageAbove(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n\n if (layoutInfo) {\n let pageY = Math.max(0, layoutInfo.rect.y + layoutInfo.rect.height - this.virtualizer.visibleRect.height);\n // If the node is so large that it spans multiple page heights, return the key of the item immediately above\n // Otherwise keep going up until we exceed a single page height worth of nodes\n let keyAbove = this.collection.getItem(this.getKeyAbove(key))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyAbove);\n\n if (layoutInfo && layoutInfo.rect.y > pageY) {\n while (layoutInfo && layoutInfo.rect.y > pageY) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n let keyAbove = this.collection.getItem(this.getKeyAbove(childKey))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyAbove);\n }\n }\n\n if (layoutInfo) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n return childKey;\n }\n }\n\n return this.getFirstKey();\n }\n\n // TODO: pretty unwieldy because it needs to bounce back and forth between the parent key and the child key\n // Perhaps have layoutInfo store childKey as well so we don't need to do this?\n getKeyPageBelow(key: Key) {\n // Expected key is the currently focused cell so we need the parent row key\n let parentRowKey = this.collection.getItem(key).parentKey;\n let layoutInfo = this.getLayoutInfo(parentRowKey);\n if (layoutInfo) {\n let pageY = Math.min(this.virtualizer.contentSize.height, layoutInfo.rect.y - layoutInfo.rect.height + this.virtualizer.visibleRect.height);\n // If the node is so large that it spans multiple page heights, return the key of the item immediately below\n // Otherwise keep going up until we exceed a single page height worth of nodes\n let keyBelow = this.collection.getItem(this.getKeyBelow(key))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyBelow);\n if (layoutInfo && layoutInfo.rect.y < pageY) {\n while (layoutInfo && layoutInfo.rect.y < pageY) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n let keyBelow = this.collection.getItem(this.getKeyBelow(childKey))?.parentKey;\n layoutInfo = this.getLayoutInfo(keyBelow);\n }\n }\n\n if (layoutInfo) {\n let childKey = getFirstItem(getChildNodes(this.collection.getItem(layoutInfo.key), this.collection))?.key;\n return childKey;\n }\n }\n\n return this.getLastKey();\n }\n\n getKeyForSearch(search: string, fromKey?: Key) {\n if (!this.collator) {\n return null;\n }\n\n let collection = this.collection;\n let key = fromKey ?? this.getFirstKey();\n\n let startItem = collection.getItem(key);\n key = startItem.parentKey;\n\n while (key != null) {\n let item = collection.getItem(key);\n if (item.textValue) {\n let substring = item.textValue.slice(0, search.length);\n if (this.collator.compare(substring, search) === 0) {\n return getFirstItem(getChildNodes(item, this.collection))?.key;\n }\n }\n\n key = this.collection.getKeyAfter(key);\n }\n\n return null;\n }\n}\n"],"names":[],"version":3,"file":"BaseLayout.module.js.map"}
package/dist/Card.main.js CHANGED
@@ -37,10 +37,10 @@ let $6b630ac4b78ba7f3$var$Card = /*#__PURE__*/ (0, $495a5$react.forwardRef)((pro
37
37
  $6b630ac4b78ba7f3$var$Card.getCollectionNode = function* getCollectionNode(props) {
38
38
  let { children: children, textValue: textValue } = props;
39
39
  yield {
40
- type: "item",
40
+ type: 'item',
41
41
  props: props,
42
42
  rendered: children,
43
- "aria-label": props["aria-label"],
43
+ 'aria-label': props['aria-label'],
44
44
  hasChildNodes: false,
45
45
  textValue: textValue
46
46
  };
package/dist/Card.mjs CHANGED
@@ -27,10 +27,10 @@ let $d2d1c099b89e366a$var$Card = /*#__PURE__*/ (0, $kaPls$forwardRef)((props, re
27
27
  $d2d1c099b89e366a$var$Card.getCollectionNode = function* getCollectionNode(props) {
28
28
  let { children: children, textValue: textValue } = props;
29
29
  yield {
30
- type: "item",
30
+ type: 'item',
31
31
  props: props,
32
32
  rendered: children,
33
- "aria-label": props["aria-label"],
33
+ 'aria-label': props['aria-label'],
34
34
  hasChildNodes: false,
35
35
  textValue: textValue
36
36
  };
@@ -39,4 +39,4 @@ let $d2d1c099b89e366a$export$60332b2344f7fe41 = $d2d1c099b89e366a$var$Card;
39
39
 
40
40
 
41
41
  export {$d2d1c099b89e366a$export$60332b2344f7fe41 as Card};
42
- //# sourceMappingURL=Card.mjs.map
42
+ //# sourceMappingURL=Card.module.js.map
@@ -27,10 +27,10 @@ let $d2d1c099b89e366a$var$Card = /*#__PURE__*/ (0, $kaPls$forwardRef)((props, re
27
27
  $d2d1c099b89e366a$var$Card.getCollectionNode = function* getCollectionNode(props) {
28
28
  let { children: children, textValue: textValue } = props;
29
29
  yield {
30
- type: "item",
30
+ type: 'item',
31
31
  props: props,
32
32
  rendered: children,
33
- "aria-label": props["aria-label"],
33
+ 'aria-label': props['aria-label'],
34
34
  hasChildNodes: false,
35
35
  textValue: textValue
36
36
  };