@react-spectrum/list 3.0.0-beta.0 → 3.0.0-nightly-4980928d3-240906

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 (230) hide show
  1. package/dist/DragPreview.main.js +79 -0
  2. package/dist/DragPreview.main.js.map +1 -0
  3. package/dist/DragPreview.mjs +74 -0
  4. package/dist/DragPreview.module.js +74 -0
  5. package/dist/DragPreview.module.js.map +1 -0
  6. package/dist/InsertionIndicator.main.js +49 -0
  7. package/dist/InsertionIndicator.main.js.map +1 -0
  8. package/dist/InsertionIndicator.mjs +44 -0
  9. package/dist/InsertionIndicator.module.js +44 -0
  10. package/dist/InsertionIndicator.module.js.map +1 -0
  11. package/dist/ListView.main.js +299 -0
  12. package/dist/ListView.main.js.map +1 -0
  13. package/dist/ListView.mjs +293 -0
  14. package/dist/ListView.module.js +293 -0
  15. package/dist/ListView.module.js.map +1 -0
  16. package/dist/ListViewItem.main.js +252 -0
  17. package/dist/ListViewItem.main.js.map +1 -0
  18. package/dist/ListViewItem.mjs +247 -0
  19. package/dist/ListViewItem.module.js +247 -0
  20. package/dist/ListViewItem.module.js.map +1 -0
  21. package/dist/ListViewLayout.main.js +69 -0
  22. package/dist/ListViewLayout.main.js.map +1 -0
  23. package/dist/ListViewLayout.mjs +64 -0
  24. package/dist/ListViewLayout.module.js +64 -0
  25. package/dist/ListViewLayout.module.js.map +1 -0
  26. package/dist/RootDropIndicator.main.js +46 -0
  27. package/dist/RootDropIndicator.main.js.map +1 -0
  28. package/dist/RootDropIndicator.mjs +37 -0
  29. package/dist/RootDropIndicator.module.js +37 -0
  30. package/dist/RootDropIndicator.module.js.map +1 -0
  31. package/dist/ar-AE.main.js +7 -0
  32. package/dist/ar-AE.main.js.map +1 -0
  33. package/dist/ar-AE.mjs +9 -0
  34. package/dist/ar-AE.module.js +9 -0
  35. package/dist/ar-AE.module.js.map +1 -0
  36. package/dist/bg-BG.main.js +7 -0
  37. package/dist/bg-BG.main.js.map +1 -0
  38. package/dist/bg-BG.mjs +9 -0
  39. package/dist/bg-BG.module.js +9 -0
  40. package/dist/bg-BG.module.js.map +1 -0
  41. package/dist/cs-CZ.main.js +7 -0
  42. package/dist/cs-CZ.main.js.map +1 -0
  43. package/dist/cs-CZ.mjs +9 -0
  44. package/dist/cs-CZ.module.js +9 -0
  45. package/dist/cs-CZ.module.js.map +1 -0
  46. package/dist/da-DK.main.js +7 -0
  47. package/dist/da-DK.main.js.map +1 -0
  48. package/dist/da-DK.mjs +9 -0
  49. package/dist/da-DK.module.js +9 -0
  50. package/dist/da-DK.module.js.map +1 -0
  51. package/dist/de-DE.main.js +7 -0
  52. package/dist/de-DE.main.js.map +1 -0
  53. package/dist/de-DE.mjs +9 -0
  54. package/dist/de-DE.module.js +9 -0
  55. package/dist/de-DE.module.js.map +1 -0
  56. package/dist/el-GR.main.js +7 -0
  57. package/dist/el-GR.main.js.map +1 -0
  58. package/dist/el-GR.mjs +9 -0
  59. package/dist/el-GR.module.js +9 -0
  60. package/dist/el-GR.module.js.map +1 -0
  61. package/dist/en-US.main.js +7 -0
  62. package/dist/en-US.main.js.map +1 -0
  63. package/dist/en-US.mjs +9 -0
  64. package/dist/en-US.module.js +9 -0
  65. package/dist/en-US.module.js.map +1 -0
  66. package/dist/es-ES.main.js +7 -0
  67. package/dist/es-ES.main.js.map +1 -0
  68. package/dist/es-ES.mjs +9 -0
  69. package/dist/es-ES.module.js +9 -0
  70. package/dist/es-ES.module.js.map +1 -0
  71. package/dist/et-EE.main.js +7 -0
  72. package/dist/et-EE.main.js.map +1 -0
  73. package/dist/et-EE.mjs +9 -0
  74. package/dist/et-EE.module.js +9 -0
  75. package/dist/et-EE.module.js.map +1 -0
  76. package/dist/fi-FI.main.js +7 -0
  77. package/dist/fi-FI.main.js.map +1 -0
  78. package/dist/fi-FI.mjs +9 -0
  79. package/dist/fi-FI.module.js +9 -0
  80. package/dist/fi-FI.module.js.map +1 -0
  81. package/dist/fr-FR.main.js +7 -0
  82. package/dist/fr-FR.main.js.map +1 -0
  83. package/dist/fr-FR.mjs +9 -0
  84. package/dist/fr-FR.module.js +9 -0
  85. package/dist/fr-FR.module.js.map +1 -0
  86. package/dist/he-IL.main.js +7 -0
  87. package/dist/he-IL.main.js.map +1 -0
  88. package/dist/he-IL.mjs +9 -0
  89. package/dist/he-IL.module.js +9 -0
  90. package/dist/he-IL.module.js.map +1 -0
  91. package/dist/hr-HR.main.js +7 -0
  92. package/dist/hr-HR.main.js.map +1 -0
  93. package/dist/hr-HR.mjs +9 -0
  94. package/dist/hr-HR.module.js +9 -0
  95. package/dist/hr-HR.module.js.map +1 -0
  96. package/dist/hu-HU.main.js +7 -0
  97. package/dist/hu-HU.main.js.map +1 -0
  98. package/dist/hu-HU.mjs +9 -0
  99. package/dist/hu-HU.module.js +9 -0
  100. package/dist/hu-HU.module.js.map +1 -0
  101. package/dist/import.mjs +19 -0
  102. package/dist/intlStrings.main.js +108 -0
  103. package/dist/intlStrings.main.js.map +1 -0
  104. package/dist/intlStrings.mjs +110 -0
  105. package/dist/intlStrings.module.js +110 -0
  106. package/dist/intlStrings.module.js.map +1 -0
  107. package/dist/it-IT.main.js +7 -0
  108. package/dist/it-IT.main.js.map +1 -0
  109. package/dist/it-IT.mjs +9 -0
  110. package/dist/it-IT.module.js +9 -0
  111. package/dist/it-IT.module.js.map +1 -0
  112. package/dist/ja-JP.main.js +7 -0
  113. package/dist/ja-JP.main.js.map +1 -0
  114. package/dist/ja-JP.mjs +9 -0
  115. package/dist/ja-JP.module.js +9 -0
  116. package/dist/ja-JP.module.js.map +1 -0
  117. package/dist/ko-KR.main.js +7 -0
  118. package/dist/ko-KR.main.js.map +1 -0
  119. package/dist/ko-KR.mjs +9 -0
  120. package/dist/ko-KR.module.js +9 -0
  121. package/dist/ko-KR.module.js.map +1 -0
  122. package/dist/lt-LT.main.js +7 -0
  123. package/dist/lt-LT.main.js.map +1 -0
  124. package/dist/lt-LT.mjs +9 -0
  125. package/dist/lt-LT.module.js +9 -0
  126. package/dist/lt-LT.module.js.map +1 -0
  127. package/dist/lv-LV.main.js +7 -0
  128. package/dist/lv-LV.main.js.map +1 -0
  129. package/dist/lv-LV.mjs +9 -0
  130. package/dist/lv-LV.module.js +9 -0
  131. package/dist/lv-LV.module.js.map +1 -0
  132. package/dist/main.js +14 -962
  133. package/dist/main.js.map +1 -1
  134. package/dist/module.js +12 -964
  135. package/dist/module.js.map +1 -1
  136. package/dist/nb-NO.main.js +7 -0
  137. package/dist/nb-NO.main.js.map +1 -0
  138. package/dist/nb-NO.mjs +9 -0
  139. package/dist/nb-NO.module.js +9 -0
  140. package/dist/nb-NO.module.js.map +1 -0
  141. package/dist/nl-NL.main.js +7 -0
  142. package/dist/nl-NL.main.js.map +1 -0
  143. package/dist/nl-NL.mjs +9 -0
  144. package/dist/nl-NL.module.js +9 -0
  145. package/dist/nl-NL.module.js.map +1 -0
  146. package/dist/pl-PL.main.js +7 -0
  147. package/dist/pl-PL.main.js.map +1 -0
  148. package/dist/pl-PL.mjs +9 -0
  149. package/dist/pl-PL.module.js +9 -0
  150. package/dist/pl-PL.module.js.map +1 -0
  151. package/dist/pt-BR.main.js +7 -0
  152. package/dist/pt-BR.main.js.map +1 -0
  153. package/dist/pt-BR.mjs +9 -0
  154. package/dist/pt-BR.module.js +9 -0
  155. package/dist/pt-BR.module.js.map +1 -0
  156. package/dist/pt-PT.main.js +7 -0
  157. package/dist/pt-PT.main.js.map +1 -0
  158. package/dist/pt-PT.mjs +9 -0
  159. package/dist/pt-PT.module.js +9 -0
  160. package/dist/pt-PT.module.js.map +1 -0
  161. package/dist/ro-RO.main.js +7 -0
  162. package/dist/ro-RO.main.js.map +1 -0
  163. package/dist/ro-RO.mjs +9 -0
  164. package/dist/ro-RO.module.js +9 -0
  165. package/dist/ro-RO.module.js.map +1 -0
  166. package/dist/ru-RU.main.js +7 -0
  167. package/dist/ru-RU.main.js.map +1 -0
  168. package/dist/ru-RU.mjs +9 -0
  169. package/dist/ru-RU.module.js +9 -0
  170. package/dist/ru-RU.module.js.map +1 -0
  171. package/dist/sk-SK.main.js +7 -0
  172. package/dist/sk-SK.main.js.map +1 -0
  173. package/dist/sk-SK.mjs +9 -0
  174. package/dist/sk-SK.module.js +9 -0
  175. package/dist/sk-SK.module.js.map +1 -0
  176. package/dist/sl-SI.main.js +7 -0
  177. package/dist/sl-SI.main.js.map +1 -0
  178. package/dist/sl-SI.mjs +9 -0
  179. package/dist/sl-SI.module.js +9 -0
  180. package/dist/sl-SI.module.js.map +1 -0
  181. package/dist/sr-SP.main.js +7 -0
  182. package/dist/sr-SP.main.js.map +1 -0
  183. package/dist/sr-SP.mjs +9 -0
  184. package/dist/sr-SP.module.js +9 -0
  185. package/dist/sr-SP.module.js.map +1 -0
  186. package/dist/styles.d09a6cc6.css +839 -0
  187. package/dist/styles.d09a6cc6.css.map +1 -0
  188. package/dist/styles_css.main.js +197 -0
  189. package/dist/styles_css.main.js.map +1 -0
  190. package/dist/styles_css.mjs +199 -0
  191. package/dist/styles_css.module.js +199 -0
  192. package/dist/styles_css.module.js.map +1 -0
  193. package/dist/sv-SE.main.js +7 -0
  194. package/dist/sv-SE.main.js.map +1 -0
  195. package/dist/sv-SE.mjs +9 -0
  196. package/dist/sv-SE.module.js +9 -0
  197. package/dist/sv-SE.module.js.map +1 -0
  198. package/dist/tr-TR.main.js +7 -0
  199. package/dist/tr-TR.main.js.map +1 -0
  200. package/dist/tr-TR.mjs +9 -0
  201. package/dist/tr-TR.module.js +9 -0
  202. package/dist/tr-TR.module.js.map +1 -0
  203. package/dist/types.d.ts +33 -5
  204. package/dist/types.d.ts.map +1 -1
  205. package/dist/uk-UA.main.js +7 -0
  206. package/dist/uk-UA.main.js.map +1 -0
  207. package/dist/uk-UA.mjs +9 -0
  208. package/dist/uk-UA.module.js +9 -0
  209. package/dist/uk-UA.module.js.map +1 -0
  210. package/dist/zh-CN.main.js +7 -0
  211. package/dist/zh-CN.main.js.map +1 -0
  212. package/dist/zh-CN.mjs +9 -0
  213. package/dist/zh-CN.module.js +9 -0
  214. package/dist/zh-CN.module.js.map +1 -0
  215. package/dist/zh-TW.main.js +7 -0
  216. package/dist/zh-TW.main.js.map +1 -0
  217. package/dist/zh-TW.mjs +9 -0
  218. package/dist/zh-TW.module.js +9 -0
  219. package/dist/zh-TW.module.js.map +1 -0
  220. package/package.json +39 -43
  221. package/src/DragPreview.tsx +20 -8
  222. package/src/InsertionIndicator.tsx +3 -3
  223. package/src/ListView.tsx +187 -178
  224. package/src/ListViewItem.tsx +30 -17
  225. package/src/ListViewLayout.ts +66 -0
  226. package/src/RootDropIndicator.tsx +6 -7
  227. package/src/index.ts +13 -0
  228. package/src/styles.css +195 -68
  229. package/LICENSE +0 -201
  230. package/dist/main.css +0 -1
@@ -0,0 +1,66 @@
1
+ /*
2
+ * Copyright 2024 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ import {InvalidationContext, LayoutInfo, Rect} from '@react-stately/virtualizer';
13
+ import {LayoutNode, ListLayout} from '@react-stately/layout';
14
+ import {Node} from '@react-types/shared';
15
+
16
+ interface ListViewLayoutProps {
17
+ isLoading?: boolean
18
+ }
19
+
20
+ export class ListViewLayout<T> extends ListLayout<T, ListViewLayoutProps> {
21
+ private isLoading: boolean = false;
22
+
23
+ update(invalidationContext: InvalidationContext<ListViewLayoutProps>): void {
24
+ this.isLoading = invalidationContext.layoutOptions?.isLoading || false;
25
+ super.update(invalidationContext);
26
+ }
27
+
28
+ protected buildCollection(): LayoutNode[] {
29
+ let nodes = super.buildCollection();
30
+ let y = this.contentSize.height;
31
+
32
+ if (this.isLoading) {
33
+ let rect = new Rect(0, y, this.virtualizer.visibleRect.width, nodes.length === 0 ? this.virtualizer.visibleRect.height : this.estimatedRowHeight);
34
+ let loader = new LayoutInfo('loader', 'loader', rect);
35
+ let node = {
36
+ layoutInfo: loader,
37
+ validRect: loader.rect
38
+ };
39
+ nodes.push(node);
40
+ this.layoutNodes.set(loader.key, node);
41
+ y = loader.rect.maxY;
42
+ }
43
+
44
+ if (nodes.length === 0) {
45
+ let rect = new Rect(0, y, this.virtualizer.visibleRect.width, this.virtualizer.visibleRect.height);
46
+ let placeholder = new LayoutInfo('placeholder', 'placeholder', rect);
47
+ let node = {
48
+ layoutInfo: placeholder,
49
+ validRect: placeholder.rect
50
+ };
51
+ nodes.push(node);
52
+ this.layoutNodes.set(placeholder.key, node);
53
+ y = placeholder.rect.maxY;
54
+ }
55
+
56
+ this.contentSize.height = y;
57
+ return nodes;
58
+ }
59
+
60
+ protected buildItem(node: Node<T>, x: number, y: number): LayoutNode {
61
+ let res = super.buildItem(node, x, y);
62
+ // allow overflow so the focus ring/selection ring can extend outside to overlap with the adjacent items borders
63
+ res.layoutInfo.allowOverflow = true;
64
+ return res;
65
+ }
66
+ }
@@ -3,14 +3,14 @@ import React, {useContext, useRef} from 'react';
3
3
  import {useVisuallyHidden} from '@react-aria/visually-hidden';
4
4
 
5
5
  export default function RootDropIndicator() {
6
- let {dropState, dropHooks} = useContext(ListViewContext);
7
- let ref = useRef();
8
- let {dropIndicatorProps} = dropHooks.useDropIndicator({
6
+ let {dropState, dragAndDropHooks} = useContext(ListViewContext);
7
+ let ref = useRef(undefined);
8
+ let {dropIndicatorProps} = dragAndDropHooks.useDropIndicator({
9
9
  target: {type: 'root'}
10
10
  }, dropState, ref);
11
11
  let isDropTarget = dropState.isDropTarget({type: 'root'});
12
12
  let {visuallyHiddenProps} = useVisuallyHidden();
13
-
13
+
14
14
  if (!isDropTarget && dropIndicatorProps['aria-hidden']) {
15
15
  return null;
16
16
  }
@@ -19,9 +19,8 @@ export default function RootDropIndicator() {
19
19
  <div role="row" aria-hidden={dropIndicatorProps['aria-hidden']}>
20
20
  <div
21
21
  role="gridcell"
22
- aria-selected="false"
23
- {...visuallyHiddenProps}>
24
- <div role="button" {...dropIndicatorProps} ref={ref} />
22
+ aria-selected="false">
23
+ <div role="button" {...visuallyHiddenProps} {...dropIndicatorProps} ref={ref} />
25
24
  </div>
26
25
  </div>
27
26
  );
package/src/index.ts CHANGED
@@ -1,2 +1,15 @@
1
+ /*
2
+ * Copyright 2022 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+
1
13
  export {ListView} from './ListView';
2
14
  export {Item} from '@react-stately/collections';
15
+ export type {SpectrumListViewProps} from './ListView';
package/src/styles.css CHANGED
@@ -10,7 +10,8 @@
10
10
  * governing permissions and limitations under the License.
11
11
  */
12
12
 
13
- :root {
13
+ .react-spectrum-ListView,
14
+ .react-spectrum-ListViewItem {
14
15
  --spectrum-listview-item-compact-padding-y: var(--spectrum-global-dimension-size-50);
15
16
  --spectrum-listview-item-regular-padding-y: var(--spectrum-global-dimension-size-85);
16
17
  --spectrum-listview-item-spacious-padding-y: var(--spectrum-global-dimension-size-100);
@@ -23,11 +24,39 @@
23
24
  --spectrum-listview-item-title-text-size: var(--spectrum-global-dimension-font-size-100);
24
25
  --spectrum-listview-item-description-text-color: var(--spectrum-global-color-gray-700);
25
26
  --spectrum-listview-item-description-text-size: var(--spectrum-global-dimension-font-size-75);
27
+
28
+ --spectrum-listview-border-color: var(--spectrum-table-border-color, var(--spectrum-alias-border-color-mid));
29
+ --spectrum-listview-border-color-key-focus: var(--spectrum-table-cell-border-color-key-focus, var(--spectrum-alias-focus-color));
30
+ --spectrum-listview-background-color: var(--spectrum-table-background-color, var(--spectrum-global-color-gray-50));
31
+ --spectrum-listview-item-background-color-hover: var(--spectrum-table-row-background-color-hover);
32
+ --spectrum-listview-item-background-color-down: var(--spectrum-table-row-background-color-down);
33
+ --spectrum-listview-item-background-color-selected: var(--spectrum-table-row-background-color-selected);
34
+ --spectrum-listview-item-background-color-selected-hover: var(--spectrum-table-row-background-color-selected);
35
+ --spectrum-listview-item-background-color-selected-key-focus: var(--spectrum-table-row-background-color-selected-key-focus);
36
+ --spectrum-listview-item-border-color: var(--spectrum-table-cell-border-color, var(--spectrum-alias-border-color-mid));
37
+ --spectrum-listview-item-border-color-selected: var(--spectrum-global-color-blue-500);
38
+ --spectrum-listview-item-border-color-key-focus: var(--spectrum-table-cell-border-color-key-focus, var(--spectrum-alias-focus-color));
39
+ --spectrum-listview-row-sticky-focus-indicator-color: var(--spectrum-selectlist-option-focus-indicator-color);
40
+ --spectrum-listview-quiet-background-color: var(--spectrum-alias-background-color-transparent);
41
+ --spectrum-listview-item-text-color: var(--spectrum-table-cell-text-color, var(--spectrum-alias-text-color));
42
+ --spectrum-listview-item-text-color-disabled: var(--spectrum-alias-text-color-disabled);
43
+ --spectrum-listview-droptarget-background-color: var(--spectrum-alias-highlight-selected);
44
+ --spectrum-listview-dropindicator-border-color: var(--spectrum-dropindicator-border-color);
45
+ --spectrum-listview-dropindicator-circle-border-color: var(--spectrum-dropindicator-circle-border-color);
46
+
47
+ --spectrum-listview-dropindicator-circle-size: var(--spectrum-dropindicator-circle-size);
48
+ --spectrum-listview-dropindicator-border-size: var(--spectrum-dropindicator-border-size);
49
+
50
+ --spectrum-listview-dropzone-border-color-selected-hover: var(--spectrum-dropzone-border-color-selected-hover);
51
+ --spectrum-listview-item-badge-text-color: var(--spectrum-global-color-static-white);
52
+ --spectrum-listview-item-badge-background-color: var(--spectrum-global-color-blue-400);
53
+
54
+ --spectrum-listview-item-draghandle-border-color-key-focus: var(--spectrum-listview-item-border-color-key-focus);
26
55
  }
27
56
 
28
57
  .react-spectrum-ListView {
29
58
  box-sizing: border-box;
30
- border-color: var(--spectrum-table-border-color, var(--spectrum-alias-border-color-mid));
59
+ border-color: var(--spectrum-listview-border-color);
31
60
  border-style: solid;
32
61
  position: relative;
33
62
  border-width: var(--spectrum-listview-border-width);
@@ -38,7 +67,7 @@
38
67
  border-spacing: 0;
39
68
  transform: translate3d(0, 0, 0);
40
69
  padding: 0;
41
- background-color: var(--spectrum-table-background-color, var(--spectrum-global-color-gray-50));
70
+ background-color: var(--spectrum-listview-background-color);
42
71
  outline: 0;
43
72
  user-select: none;
44
73
 
@@ -68,23 +97,30 @@
68
97
  inset-block-start: 0;
69
98
  z-index: 3;
70
99
  pointer-events: none;
100
+
101
+ /* forced-color-adjust: none, so that box-shadow style will render */
102
+ forced-color-adjust: none;
71
103
  }
72
104
 
73
105
  &.is-selected {
74
- background-color: var(--spectrum-table-row-background-color-selected);
106
+ background-color: var(--spectrum-listview-item-background-color-selected);
75
107
  &.is-hovered,
76
108
  &.is-active {
77
- background-color: var(--spectrum-table-row-background-color-selected-hover);
109
+ background-color: var(--spectrum-listview-item-background-color-selected-hover);
78
110
  }
79
111
 
80
- &:focus-ring {
81
- background-color: var(--spectrum-table-row-background-color-selected-key-focus);
112
+ &:focus-visible {
113
+ background-color: var(--spectrum-listview-item-background-color-selected-key-focus);
82
114
  }
83
115
 
84
116
  /* Negative block start causes borders to actually be shared between items. Only works if we allow item overflow to be visible, like card focus rings. */
85
117
  &:after {
86
118
  inset-block-start: -1px;
87
- box-shadow: inset 1px 0 0 0 var(--spectrum-global-color-blue-500), inset -1px 0 0 0 var(--spectrum-global-color-blue-500), inset 0 -1px 0 0 var(--spectrum-global-color-blue-500), inset 0 1px 0 0 var(--spectrum-global-color-blue-500);
119
+ box-shadow:
120
+ inset 1px 0 0 0 var(--spectrum-listview-item-border-color-selected),
121
+ inset -1px 0 0 0 var(--spectrum-listview-item-border-color-selected),
122
+ inset 0 -1px 0 0 var(--spectrum-listview-item-border-color-selected),
123
+ inset 0 1px 0 0 var(--spectrum-listview-item-border-color-selected);
88
124
  }
89
125
  }
90
126
 
@@ -104,7 +140,7 @@
104
140
  /* Also omit bottom border for last row if the total content height of the ListView is equal or greater than the height of the container. This avoids overlapping bottom borders. */
105
141
  &:not(.is-selected):not(.is-next-selected):not(.react-spectrum-ListViewItem--isFlushBottom) {
106
142
  &:after {
107
- box-shadow: inset 0 -1px 0 0 var(--spectrum-table-cell-border-color);
143
+ box-shadow: inset 0 -1px 0 0 var(--spectrum-listview-item-border-color);
108
144
  }
109
145
  }
110
146
 
@@ -167,7 +203,7 @@
167
203
  .react-spectrum-ListView-row {
168
204
  cursor: default;
169
205
  /* Not sticky because listview is a single column. If we want to make sticky, will need a cell wrapper like TableView for display: inline-block */
170
- &:focus-ring {
206
+ &:focus-visible {
171
207
  &:before {
172
208
  content: '';
173
209
  position: absolute;
@@ -176,19 +212,22 @@
176
212
  inset-inline-start: 0;
177
213
  width: var(--spectrum-listview-row-sticky-focus-indicator-width);
178
214
  z-index: 4;
179
- background: var(--spectrum-selectlist-option-focus-indicator-color);
215
+ background: var(--spectrum-listview-row-sticky-focus-indicator-color);
216
+
217
+ /* forced-color-adjust: none, so that background color will render for the sticky focus indicator. */
218
+ forced-color-adjust: none;
180
219
  }
181
220
  }
182
221
  }
183
222
 
184
223
  .react-spectrum-ListView.react-spectrum-ListView--quiet {
185
- background-color: var(--spectrum-alias-background-color-transparent);
224
+ background-color: var(--spectrum-listview-quiet-background-color);
186
225
  border-width: 0;
187
226
  border-radius: 0;
188
227
 
189
228
  .react-spectrum-ListView-row {
190
229
  &.round-tops {
191
- &:focus-ring {
230
+ &:focus-visible {
192
231
  &:before {
193
232
  border-start-start-radius: var(--spectrum-listview-item-border-radius);
194
233
  }
@@ -205,7 +244,7 @@
205
244
  }
206
245
 
207
246
  &.round-bottoms {
208
- &:focus-ring {
247
+ &:focus-visible {
209
248
  &:before {
210
249
  border-end-start-radius: var(--spectrum-listview-item-border-radius);
211
250
  }
@@ -223,6 +262,10 @@
223
262
  }
224
263
  }
225
264
 
265
+ .react-spectrum-ListView-row[data-href] {
266
+ cursor: pointer;
267
+ }
268
+
226
269
  .react-spectrum-ListViewItem {
227
270
  display: grid; /* TODO: define grid areas */
228
271
  box-sizing: border-box;
@@ -232,39 +275,39 @@
232
275
  padding: var(--spectrum-listview-item-regular-padding-y) var(--spectrum-global-dimension-size-160);
233
276
  position: relative;
234
277
  /*background-color: var(--spectrum-table-background-color, var(--spectrum-global-color-gray-50));*/
235
- color: var(--spectrum-table-cell-text-color, var(--spectrum-alias-text-color));
278
+ color: var(--spectrum-listview-item-text-color);
236
279
  outline: 0;
237
280
  min-height: var(--spectrum-global-dimension-size-500);
238
281
 
239
282
  &.is-hovered,
240
283
  &.is-focused {
241
- background-color: var(--spectrum-table-row-background-color-hover);
284
+ background-color: var(--spectrum-listview-item-background-color-hover);
242
285
  }
243
286
 
244
- &:focus-ring {
245
- background-color: var(--spectrum-table-row-background-color-hover);
287
+ &:focus-visible {
288
+ background-color: var(--spectrum-listview-item-background-color-hover);
246
289
  }
247
290
 
248
291
  &.is-active {
249
- background-color: var(--spectrum-table-row-background-color-down);
292
+ background-color: var(--spectrum-listview-item-background-color-down);
250
293
  }
251
294
 
252
295
  &.is-selected {
253
- background-color: var(--spectrum-table-row-background-color-hover);
296
+ background-color: var(--spectrum-listview-item-background-color-hover);
254
297
 
255
298
  &.is-hovered,
256
299
  &.is-active {
257
- background-color: var(--spectrum-table-row-background-color-hover);
300
+ background-color: var(--spectrum-listview-item-background-color-hover);
258
301
  }
259
302
 
260
- &:focus-ring {
261
- background-color: var(--spectrum-table-row-background-color-selected-key-focus);
303
+ &:focus-visible {
304
+ background-color: var(--spectrum-listview-item-background-color-selected-key-focus);
262
305
  }
263
306
  }
264
307
 
265
308
  &.is-disabled {
266
309
  &, .react-spectrum-ListViewItem-content, .react-spectrum-ListViewItem-description {
267
- color: var(--spectrum-alias-text-color-disabled);
310
+ color: var(--spectrum-listview-item-text-color-disabled);
268
311
  }
269
312
  }
270
313
 
@@ -276,11 +319,11 @@
276
319
 
277
320
  .react-spectrum-ListViewItem-grid {
278
321
  display: grid;
279
- grid-template-columns: auto auto auto auto 1fr auto auto;
322
+ grid-template-columns: auto auto auto 1fr auto auto auto;
280
323
  grid-template-rows: 1fr auto;
281
324
  grid-template-areas:
282
- "draghandle checkbox icon image content actions actionmenu chevron"
283
- "draghandle checkbox icon image description actions actionmenu chevron";
325
+ "draghandle checkbox thumbnail content actions actionmenu chevron"
326
+ "draghandle checkbox thumbnail description actions actionmenu chevron";
284
327
  align-items: center;
285
328
  }
286
329
 
@@ -302,9 +345,12 @@
302
345
  justify-content: center;
303
346
  border-radius: var(--spectrum-alias-border-radius-regular);
304
347
 
305
- &:focus-ring {
306
- box-shadow: inset 0 0 0 2px var(--spectrum-table-cell-border-color-key-focus);
348
+ &:focus-visible {
349
+ box-shadow: inset 0 0 0 2px var(--spectrum-listview-item-draghandle-border-color-key-focus);
307
350
  outline: none;
351
+
352
+ /* forced-color-adjust: none, so that box-shadow style will render */
353
+ forced-color-adjust: none;
308
354
  }
309
355
  }
310
356
  }
@@ -326,25 +372,21 @@
326
372
  }
327
373
  }
328
374
 
329
- .react-spectrum-ListViewItem-icon,
330
- .react-spectrum-ListViewItem-image {
331
- grid-area: image;
332
- align-items: center;
375
+ .react-spectrum-ListViewItem-thumbnail {
376
+ box-sizing: content-box;
377
+ grid-area: thumbnail;
333
378
  justify-items: center;
334
379
  padding-inline-end: var(--spectrum-global-dimension-size-100);
335
- }
336
-
337
- .react-spectrum-ListViewItem-image {
338
380
  display: flex;
339
381
  border-radius: var(--spectrum-global-dimension-size-25);
340
382
  width: var(--spectrum-global-dimension-size-400);
341
383
  height: var(--spectrum-global-dimension-size-400);
342
384
  align-items: center;
343
385
  justify-content: center;
386
+
344
387
  > img {
345
388
  width: unset;
346
- height: unset;
347
- max-height: 100%;
389
+ height: 100%;
348
390
  }
349
391
  }
350
392
 
@@ -400,21 +442,34 @@
400
442
 
401
443
  &.react-spectrum-ListViewItem-dragPreview {
402
444
  width: var(--spectrum-global-dimension-size-2400);
403
- border: 1px solid var(--spectrum-dropzone-border-color-selected-hover);
445
+ border: 1px solid var(--spectrum-listview-dropzone-border-color-selected-hover);
404
446
  border-radius: var(--spectrum-alias-border-radius-regular);
405
- background-color: var(--spectrum-table-background-color, var(--spectrum-global-color-gray-50));
447
+ background-color: var(--spectrum-listview-background-color);
448
+
449
+ /* forced-color-adjust: none, so that background-color style will render */
450
+ forced-color-adjust: none;
451
+
452
+ &.react-spectrum-ListViewItem-dragPreview--compact {
453
+ padding-top: var(--spectrum-listview-item-compact-padding-y);
454
+ padding-bottom: var(--spectrum-listview-item-compact-padding-y);
455
+ }
456
+
457
+ &.react-spectrum-ListViewItem-dragPreview--spacious {
458
+ padding-top: var(--spectrum-listview-item-spacious-padding-y);
459
+ padding-bottom: var(--spectrum-listview-item-spacious-padding-y);
460
+ }
406
461
 
407
462
  .react-spectrum-ListViewItem-grid {
408
463
  grid-template-areas:
409
- "icon image content . badge"
410
- "icon image description . badge";
411
- grid-template-columns: auto auto auto 1fr;
464
+ "thumbnail content . badge"
465
+ "thumbnail description . badge";
466
+ grid-template-columns: auto auto 1fr auto;
412
467
  }
413
468
 
414
469
  .react-spectrum-ListViewItem-badge {
415
470
  grid-area: badge;
416
- color: white;
417
- background: var(--spectrum-global-color-blue-400);
471
+ color: var(--spectrum-listview-item-badge-text-color);
472
+ background: var(--spectrum-listview-item-badge-background-color);
418
473
  padding: 0 8px;
419
474
  border-radius: var(--spectrum-alias-border-radius-regular);
420
475
  }
@@ -431,9 +486,12 @@
431
486
  inset-inline-start: 4px;
432
487
  width: 100%;
433
488
  height: 100%;
434
- border: 1px solid var(--spectrum-dropzone-border-color-selected-hover);
489
+ border: 1px solid var(--spectrum-listview-dropzone-border-color-selected-hover);
435
490
  border-radius: var(--spectrum-alias-border-radius-regular);
436
- background-color: var(--spectrum-table-background-color, var(--spectrum-global-color-gray-50));
491
+ background-color: var(--spectrum-listview-background-color);
492
+
493
+ /* forced-color-adjust: none, so that box-shadow style will render */
494
+ forced-color-adjust: none;
437
495
  }
438
496
  }
439
497
 
@@ -510,22 +568,28 @@
510
568
  }
511
569
 
512
570
  .react-spectrum-ListViewItem--dropTarget {
513
- background-color: var(--spectrum-alias-highlight-selected);
571
+ background-color: var(--spectrum-listview-droptarget-background-color);
514
572
  box-shadow:
515
- inset 2px 0 0 0 var(--spectrum-table-cell-border-color-key-focus),
516
- inset -2px 0 0 0 var(--spectrum-table-cell-border-color-key-focus),
517
- inset 0 -3px 0 0 var(--spectrum-table-cell-border-color-key-focus),
518
- inset 0 2px 0 0 var(--spectrum-table-cell-border-color-key-focus);
573
+ inset 2px 0 0 0 var(--spectrum-listview-item-border-color-key-focus),
574
+ inset -2px 0 0 0 var(--spectrum-listview-item-border-color-key-focus),
575
+ inset 0 -3px 0 0 var(--spectrum-listview-item-border-color-key-focus),
576
+ inset 0 2px 0 0 var(--spectrum-listview-item-border-color-key-focus);
577
+
578
+ /* forced-color-adjust: none, so that box-shadow style will render */
579
+ forced-color-adjust: none;
519
580
  }
520
581
 
521
582
  .react-spectrum-ListView.react-spectrum-ListView--dropTarget {
522
- border-color: var(--spectrum-global-color-blue-500);
523
- background-color: var(--spectrum-alias-highlight-selected);
524
- box-shadow: inset 0 0 0 1px var(--spectrum-table-cell-border-color-key-focus);
583
+ border-color: var(--spectrum-listview-border-color-key-focus);
584
+ background-color: var(--spectrum-listview-droptarget-background-color);
585
+ box-shadow: inset 0 0 0 1px var(--spectrum-listview-item-border-color-key-focus);
586
+
587
+ /* forced-color-adjust: none, so that box-shadow and background color styles will render */
588
+ forced-color-adjust: none;
525
589
 
526
590
  /* Add border to quiet ListView only when it is a drop target */
527
591
  &.react-spectrum-ListView--quiet {
528
- box-shadow: inset 0 0 0 1px var(--spectrum-table-cell-border-color-key-focus), 0 0 0 1px var(--spectrum-table-cell-border-color-key-focus);
592
+ box-shadow: inset 0 0 0 1px var(--spectrum-listview-item-border-color-key-focus), 0 0 0 1px var(--spectrum-listview-item-border-color-key-focus);
529
593
  }
530
594
  }
531
595
 
@@ -541,36 +605,43 @@
541
605
  }
542
606
 
543
607
  .react-spectrum-ListViewInsertionIndicator {
544
- width: calc(100% - (2 * var(--spectrum-dropindicator-circle-size)));
545
- inset-inline-start: var(--spectrum-dropindicator-circle-size);
608
+ width: calc(100% - (2 * var(--spectrum-listview-dropindicator-circle-size)));
609
+ inset-inline-start: var(--spectrum-listview-dropindicator-circle-size);
546
610
  position: absolute;
547
611
  outline: none;
548
612
 
549
613
  &.react-spectrum-ListViewInsertionIndicator--dropTarget {
550
- background: var(--spectrum-dropindicator-border-color);
551
- border-bottom: 2px solid var(--spectrum-dropindicator-border-color);
614
+ background: var(--spectrum-listview-dropindicator-border-color);
615
+ border-bottom: 2px solid var(--spectrum-listview-dropindicator-border-color);
616
+
617
+ /* forced-color-adjust: none, so that background color
618
+ will render border for insertion indicator. */
619
+ forced-color-adjust: none;
552
620
 
553
621
  &:before {
554
- left: calc(var(--spectrum-dropindicator-circle-size) * -1);
622
+ left: calc(var(--spectrum-listview-dropindicator-circle-size) * -1);
555
623
  }
556
624
 
557
625
  &:after {
558
- right: calc(var(--spectrum-dropindicator-circle-size) * -1);
626
+ right: calc(var(--spectrum-listview-dropindicator-circle-size) * -1);
559
627
  }
560
628
 
561
629
  &:before,
562
630
  &:after {
563
631
  content: '';
564
632
  position: absolute;
565
- top: calc(var(--spectrum-dropindicator-circle-size) * -1 / 2 + var(--spectrum-dropindicator-border-size) / 2);
566
- width: var(--spectrum-dropindicator-circle-size);
567
- height: var(--spectrum-dropindicator-circle-size);
633
+ top: calc(var(--spectrum-listview-dropindicator-circle-size) * -1 / 2 + var(--spectrum-listview-dropindicator-border-size) / 2);
634
+ width: var(--spectrum-listview-dropindicator-circle-size);
635
+ height: var(--spectrum-listview-dropindicator-circle-size);
568
636
  border-radius: 50%;
569
- border: var(--spectrum-dropindicator-border-size) solid;
637
+ border: var(--spectrum-listview-dropindicator-border-size) solid;
570
638
  box-sizing: border-box;
571
- border-color: var(--spectrum-dropindicator-circle-border-color);
572
- background-color: var(--spectrum-table-background-color, var(--spectrum-global-color-gray-50));
639
+ border-color: var(--spectrum-listview-dropindicator-circle-border-color);
640
+ background-color: var(--spectrum-listview-background-color);
573
641
  z-index: 5;
642
+
643
+ /* forced-color-adjust: none, so that box-shadow and background-color styles will render */
644
+ forced-color-adjust: none;
574
645
  }
575
646
  }
576
647
  }
@@ -591,3 +662,59 @@
591
662
  opacity: 0.01;
592
663
  max-width: 0px;
593
664
  }
665
+
666
+ .react-spectrum-ListView {
667
+ &:focus-visible {
668
+ border-color: var(--spectrum-listview-border-color-key-focus);
669
+ box-shadow: inset 0 0 0 1px var(--spectrum-listview-border-color-key-focus);
670
+ }
671
+ }
672
+
673
+ @media (forced-colors: active) {
674
+ .react-spectrum-ListView,
675
+ .react-spectrum-ListViewItem {
676
+ --spectrum-listview-background-color: Canvas;
677
+ --spectrum-listview-item-background-color: Canvas;
678
+ --spectrum-listview-item-background-color-selected: Canvas;
679
+ --spectrum-listview-border-color-key-focus: Highlight;
680
+ --spectrum-listview-item-border-color: CanvasText;
681
+ --spectrum-listview-item-border-color-selected: Highlight;
682
+ --spectrum-listview-item-border-color-key-focus: Highlight;
683
+ --spectrum-listview-row-sticky-focus-indicator-color: Highlight;
684
+ --spectrum-listview-droptarget-background-color: var(--spectrum-alias-global-color-transparent);
685
+ --spectrum-listview-dropindicator-border-color: Highlight;
686
+ --spectrum-listview-dropindicator-circle-border-color: Highlight;
687
+ --spectrum-listview-dropzone-border-color-selected-hover: Highlight;
688
+ --spectrum-listview-item-badge-text-color: HighlightText;
689
+ --spectrum-listview-item-badge-background-color: Highlight;
690
+ --spectrum-listview-item-title-text-color: CanvasText;
691
+ --spectrum-listview-item-description-text-color: CanvasText;
692
+ }
693
+
694
+ .react-spectrum-ListView-row {
695
+ &:focus-visible {
696
+ .react-spectrum-ListViewItem {
697
+ /* Adds a full outline style to the focused listview item to better distinguish between
698
+ the selected, not selected, selected + focused and selected + not focused
699
+ states without using a background color on the row in forced-colors: active mode. */
700
+ &:after {
701
+ outline: var(--spectrum-listview-row-sticky-focus-indicator-width) solid var(--spectrum-listview-row-sticky-focus-indicator-color);
702
+ outline-offset: calc(-1 * var(--spectrum-listview-row-sticky-focus-indicator-width));
703
+ top: calc(-1 * var(--spectrum-listview-border-width));
704
+ height: calc(100% + var(--spectrum-listview-border-width));
705
+ }
706
+ }
707
+ }
708
+ }
709
+
710
+ .react-spectrum-ListViewItem-draghandle-container {
711
+ box-sizing: content-box;
712
+
713
+ .react-spectrum-ListViewItem-draghandle-button {
714
+ /* Use CanvasText, so that focus ring color on drag handle button matches
715
+ focus ring color for other interactive elements within the listview item. */
716
+ --spectrum-listview-item-draghandle-border-color-key-focus: CanvasText;
717
+ }
718
+ }
719
+
720
+ }