@fluentui/react-card 9.0.0-nightly.f81b28ceb3.1 → 9.0.0-rc.2

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 (191) hide show
  1. package/CHANGELOG.json +2090 -22
  2. package/CHANGELOG.md +638 -42
  3. package/README.md +68 -4
  4. package/dist/index.d.ts +389 -0
  5. package/lib/Card.js.map +1 -1
  6. package/lib/CardFooter.js.map +1 -1
  7. package/lib/CardHeader.js.map +1 -1
  8. package/lib/CardPreview.js.map +1 -1
  9. package/lib/components/Card/Card.js +10 -9
  10. package/lib/components/Card/Card.js.map +1 -1
  11. package/lib/components/Card/Card.types.js.map +1 -1
  12. package/lib/components/Card/CardContext.js +29 -0
  13. package/lib/components/Card/CardContext.js.map +1 -0
  14. package/lib/components/Card/index.js +1 -0
  15. package/lib/components/Card/index.js.map +1 -1
  16. package/lib/components/Card/renderCard.js +16 -9
  17. package/lib/components/Card/renderCard.js.map +1 -1
  18. package/lib/components/Card/useCard.js +89 -16
  19. package/lib/components/Card/useCard.js.map +1 -1
  20. package/lib/components/Card/useCardContextValue.js +8 -0
  21. package/lib/components/Card/useCardContextValue.js.map +1 -0
  22. package/lib/components/Card/useCardSelectable.js +116 -0
  23. package/lib/components/Card/useCardSelectable.js.map +1 -0
  24. package/lib/components/Card/useCardStyles.js +329 -34
  25. package/lib/components/Card/useCardStyles.js.map +1 -1
  26. package/lib/components/CardFooter/CardFooter.js +7 -8
  27. package/lib/components/CardFooter/CardFooter.js.map +1 -1
  28. package/lib/components/CardFooter/CardFooter.types.js.map +1 -1
  29. package/lib/components/CardFooter/index.js.map +1 -1
  30. package/lib/components/CardFooter/renderCardFooter.js +11 -10
  31. package/lib/components/CardFooter/renderCardFooter.js.map +1 -1
  32. package/lib/components/CardFooter/useCardFooter.js +10 -14
  33. package/lib/components/CardFooter/useCardFooter.js.map +1 -1
  34. package/lib/components/CardFooter/useCardFooterStyles.js +20 -20
  35. package/lib/components/CardFooter/useCardFooterStyles.js.map +1 -1
  36. package/lib/components/CardHeader/CardHeader.js +7 -8
  37. package/lib/components/CardHeader/CardHeader.js.map +1 -1
  38. package/lib/components/CardHeader/CardHeader.types.js.map +1 -1
  39. package/lib/components/CardHeader/index.js.map +1 -1
  40. package/lib/components/CardHeader/renderCardHeader.js +17 -10
  41. package/lib/components/CardHeader/renderCardHeader.js.map +1 -1
  42. package/lib/components/CardHeader/useCardHeader.js +40 -25
  43. package/lib/components/CardHeader/useCardHeader.js.map +1 -1
  44. package/lib/components/CardHeader/useCardHeaderStyles.js +53 -40
  45. package/lib/components/CardHeader/useCardHeaderStyles.js.map +1 -1
  46. package/lib/components/CardPreview/CardPreview.js +7 -8
  47. package/lib/components/CardPreview/CardPreview.js.map +1 -1
  48. package/lib/components/CardPreview/CardPreview.types.js.map +1 -1
  49. package/lib/components/CardPreview/index.js.map +1 -1
  50. package/lib/components/CardPreview/renderCardPreview.js +11 -10
  51. package/lib/components/CardPreview/renderCardPreview.js.map +1 -1
  52. package/lib/components/CardPreview/useCardPreview.js +42 -15
  53. package/lib/components/CardPreview/useCardPreview.js.map +1 -1
  54. package/lib/components/CardPreview/useCardPreviewStyles.js +24 -28
  55. package/lib/components/CardPreview/useCardPreviewStyles.js.map +1 -1
  56. package/lib/index.js +5 -4
  57. package/lib/index.js.map +1 -1
  58. package/lib-commonjs/Card.js +1 -3
  59. package/lib-commonjs/Card.js.map +1 -1
  60. package/lib-commonjs/CardFooter.js +1 -3
  61. package/lib-commonjs/CardFooter.js.map +1 -1
  62. package/lib-commonjs/CardHeader.js +1 -3
  63. package/lib-commonjs/CardHeader.js.map +1 -1
  64. package/lib-commonjs/CardPreview.js +1 -3
  65. package/lib-commonjs/CardPreview.js.map +1 -1
  66. package/lib-commonjs/components/Card/Card.js +11 -15
  67. package/lib-commonjs/components/Card/Card.js.map +1 -1
  68. package/lib-commonjs/components/Card/Card.types.js.map +1 -1
  69. package/lib-commonjs/components/Card/CardContext.js +36 -0
  70. package/lib-commonjs/components/Card/CardContext.js.map +1 -0
  71. package/lib-commonjs/components/Card/index.js +2 -7
  72. package/lib-commonjs/components/Card/index.js.map +1 -1
  73. package/lib-commonjs/components/Card/renderCard.js +20 -18
  74. package/lib-commonjs/components/Card/renderCard.js.map +1 -1
  75. package/lib-commonjs/components/Card/useCard.js +91 -23
  76. package/lib-commonjs/components/Card/useCard.js.map +1 -1
  77. package/lib-commonjs/components/Card/useCardContextValue.js +15 -0
  78. package/lib-commonjs/components/Card/useCardContextValue.js.map +1 -0
  79. package/lib-commonjs/components/Card/useCardSelectable.js +123 -0
  80. package/lib-commonjs/components/Card/useCardSelectable.js.map +1 -0
  81. package/lib-commonjs/components/Card/useCardStyles.js +331 -39
  82. package/lib-commonjs/components/Card/useCardStyles.js.map +1 -1
  83. package/lib-commonjs/components/CardFooter/CardFooter.js +8 -14
  84. package/lib-commonjs/components/CardFooter/CardFooter.js.map +1 -1
  85. package/lib-commonjs/components/CardFooter/CardFooter.types.js.map +1 -1
  86. package/lib-commonjs/components/CardFooter/index.js +1 -7
  87. package/lib-commonjs/components/CardFooter/index.js.map +1 -1
  88. package/lib-commonjs/components/CardFooter/renderCardFooter.js +15 -20
  89. package/lib-commonjs/components/CardFooter/renderCardFooter.js.map +1 -1
  90. package/lib-commonjs/components/CardFooter/useCardFooter.js +13 -21
  91. package/lib-commonjs/components/CardFooter/useCardFooter.js.map +1 -1
  92. package/lib-commonjs/components/CardFooter/useCardFooterStyles.js +22 -25
  93. package/lib-commonjs/components/CardFooter/useCardFooterStyles.js.map +1 -1
  94. package/lib-commonjs/components/CardHeader/CardHeader.js +8 -14
  95. package/lib-commonjs/components/CardHeader/CardHeader.js.map +1 -1
  96. package/lib-commonjs/components/CardHeader/CardHeader.types.js.map +1 -1
  97. package/lib-commonjs/components/CardHeader/index.js +1 -7
  98. package/lib-commonjs/components/CardHeader/index.js.map +1 -1
  99. package/lib-commonjs/components/CardHeader/renderCardHeader.js +21 -20
  100. package/lib-commonjs/components/CardHeader/renderCardHeader.js.map +1 -1
  101. package/lib-commonjs/components/CardHeader/useCardHeader.js +43 -33
  102. package/lib-commonjs/components/CardHeader/useCardHeader.js.map +1 -1
  103. package/lib-commonjs/components/CardHeader/useCardHeaderStyles.js +55 -45
  104. package/lib-commonjs/components/CardHeader/useCardHeaderStyles.js.map +1 -1
  105. package/lib-commonjs/components/CardPreview/CardPreview.js +8 -14
  106. package/lib-commonjs/components/CardPreview/CardPreview.js.map +1 -1
  107. package/lib-commonjs/components/CardPreview/CardPreview.types.js.map +1 -1
  108. package/lib-commonjs/components/CardPreview/index.js +1 -7
  109. package/lib-commonjs/components/CardPreview/index.js.map +1 -1
  110. package/lib-commonjs/components/CardPreview/renderCardPreview.js +15 -20
  111. package/lib-commonjs/components/CardPreview/renderCardPreview.js.map +1 -1
  112. package/lib-commonjs/components/CardPreview/useCardPreview.js +44 -21
  113. package/lib-commonjs/components/CardPreview/useCardPreview.js.map +1 -1
  114. package/lib-commonjs/components/CardPreview/useCardPreviewStyles.js +26 -33
  115. package/lib-commonjs/components/CardPreview/useCardPreviewStyles.js.map +1 -1
  116. package/lib-commonjs/index.js +150 -10
  117. package/lib-commonjs/index.js.map +1 -1
  118. package/package.json +30 -30
  119. package/assets/ai_deck_template.png +0 -0
  120. package/assets/avatar_elvia.svg +0 -9
  121. package/assets/avatar_mauricio.svg +0 -9
  122. package/assets/doc_template.png +0 -0
  123. package/assets/powerpoint_logo.svg +0 -9
  124. package/assets/sales_template.png +0 -0
  125. package/assets/word_logo.svg +0 -9
  126. package/dist/react-card.d.ts +0 -188
  127. package/lib/Card.d.ts +0 -1
  128. package/lib/CardFooter.d.ts +0 -1
  129. package/lib/CardHeader.d.ts +0 -1
  130. package/lib/CardPreview.d.ts +0 -1
  131. package/lib/common/isConformant.d.ts +0 -4
  132. package/lib/common/isConformant.js +0 -11
  133. package/lib/common/isConformant.js.map +0 -1
  134. package/lib/components/Card/Card.d.ts +0 -6
  135. package/lib/components/Card/Card.types.d.ts +0 -13
  136. package/lib/components/Card/index.d.ts +0 -5
  137. package/lib/components/Card/renderCard.d.ts +0 -5
  138. package/lib/components/Card/useCard.d.ts +0 -12
  139. package/lib/components/Card/useCardStyles.d.ts +0 -5
  140. package/lib/components/CardFooter/CardFooter.d.ts +0 -6
  141. package/lib/components/CardFooter/CardFooter.types.d.ts +0 -13
  142. package/lib/components/CardFooter/index.d.ts +0 -5
  143. package/lib/components/CardFooter/renderCardFooter.d.ts +0 -5
  144. package/lib/components/CardFooter/useCardFooter.d.ts +0 -16
  145. package/lib/components/CardFooter/useCardFooterStyles.d.ts +0 -5
  146. package/lib/components/CardHeader/CardHeader.d.ts +0 -6
  147. package/lib/components/CardHeader/CardHeader.types.d.ts +0 -17
  148. package/lib/components/CardHeader/index.d.ts +0 -5
  149. package/lib/components/CardHeader/renderCardHeader.d.ts +0 -5
  150. package/lib/components/CardHeader/useCardHeader.d.ts +0 -13
  151. package/lib/components/CardHeader/useCardHeaderStyles.d.ts +0 -5
  152. package/lib/components/CardPreview/CardPreview.d.ts +0 -6
  153. package/lib/components/CardPreview/CardPreview.types.d.ts +0 -13
  154. package/lib/components/CardPreview/index.d.ts +0 -5
  155. package/lib/components/CardPreview/renderCardPreview.d.ts +0 -5
  156. package/lib/components/CardPreview/useCardPreview.d.ts +0 -16
  157. package/lib/components/CardPreview/useCardPreviewStyles.d.ts +0 -5
  158. package/lib/index.d.ts +0 -4
  159. package/lib/tsdoc-metadata.json +0 -11
  160. package/lib-commonjs/Card.d.ts +0 -1
  161. package/lib-commonjs/CardFooter.d.ts +0 -1
  162. package/lib-commonjs/CardHeader.d.ts +0 -1
  163. package/lib-commonjs/CardPreview.d.ts +0 -1
  164. package/lib-commonjs/common/isConformant.d.ts +0 -4
  165. package/lib-commonjs/common/isConformant.js +0 -22
  166. package/lib-commonjs/common/isConformant.js.map +0 -1
  167. package/lib-commonjs/components/Card/Card.d.ts +0 -6
  168. package/lib-commonjs/components/Card/Card.types.d.ts +0 -13
  169. package/lib-commonjs/components/Card/index.d.ts +0 -5
  170. package/lib-commonjs/components/Card/renderCard.d.ts +0 -5
  171. package/lib-commonjs/components/Card/useCard.d.ts +0 -12
  172. package/lib-commonjs/components/Card/useCardStyles.d.ts +0 -5
  173. package/lib-commonjs/components/CardFooter/CardFooter.d.ts +0 -6
  174. package/lib-commonjs/components/CardFooter/CardFooter.types.d.ts +0 -13
  175. package/lib-commonjs/components/CardFooter/index.d.ts +0 -5
  176. package/lib-commonjs/components/CardFooter/renderCardFooter.d.ts +0 -5
  177. package/lib-commonjs/components/CardFooter/useCardFooter.d.ts +0 -16
  178. package/lib-commonjs/components/CardFooter/useCardFooterStyles.d.ts +0 -5
  179. package/lib-commonjs/components/CardHeader/CardHeader.d.ts +0 -6
  180. package/lib-commonjs/components/CardHeader/CardHeader.types.d.ts +0 -17
  181. package/lib-commonjs/components/CardHeader/index.d.ts +0 -5
  182. package/lib-commonjs/components/CardHeader/renderCardHeader.d.ts +0 -5
  183. package/lib-commonjs/components/CardHeader/useCardHeader.d.ts +0 -13
  184. package/lib-commonjs/components/CardHeader/useCardHeaderStyles.d.ts +0 -5
  185. package/lib-commonjs/components/CardPreview/CardPreview.d.ts +0 -6
  186. package/lib-commonjs/components/CardPreview/CardPreview.types.d.ts +0 -13
  187. package/lib-commonjs/components/CardPreview/index.d.ts +0 -5
  188. package/lib-commonjs/components/CardPreview/renderCardPreview.d.ts +0 -5
  189. package/lib-commonjs/components/CardPreview/useCardPreview.d.ts +0 -16
  190. package/lib-commonjs/components/CardPreview/useCardPreviewStyles.d.ts +0 -5
  191. package/lib-commonjs/index.d.ts +0 -4
@@ -1,28 +1,101 @@
1
- import { __assign } from "tslib";
2
- import { getNativeElementProps } from '@fluentui/react-utilities';
3
- import { useFocusableGroup, FocusableGroupTabBehavior } from '@fluentui/react-tabster';
1
+ import * as React from 'react';
2
+ import { getNativeElementProps, useMergedRefs } from '@fluentui/react-utilities';
3
+ import { useFocusableGroup, useFocusWithin } from '@fluentui/react-tabster';
4
+ import { useCardSelectable } from './useCardSelectable';
5
+ import { cardContextDefaultValue } from './CardContext';
6
+ const focusMap = {
7
+ off: undefined,
8
+ 'no-tab': 'limited-trap-focus',
9
+ 'tab-exit': 'limited',
10
+ 'tab-only': 'unlimited'
11
+ };
4
12
  /**
5
- * Create the state required to render Card.
13
+ * Create the state for interactive cards.
6
14
  *
7
- * The returned state can be modified with hooks such as useCardStyles,
8
- * before being passed to renderCard.
15
+ * This internal hook defines if the card is interactive
16
+ * and control focus properties based on that.
9
17
  *
10
18
  * @param props - props from this instance of Card
11
- * @param ref - reference to root HTMLElement of Card
12
19
  */
13
-
14
- export var useCard = function (props, ref) {
15
- var groupperAttrs = useFocusableGroup({
16
- tabBehavior: FocusableGroupTabBehavior.LimitedTrapFocus
20
+ const useCardInteractive = ({
21
+ focusMode = 'off',
22
+ ...props
23
+ }) => {
24
+ const interactive = ['onClick', 'onDoubleClick', 'onMouseUp', 'onMouseDown', 'onPointerUp', 'onPointerDown', 'onTouchStart', 'onTouchEnd', 'onDragStart', 'onDragEnd'].some(prop => props[prop]);
25
+ const groupperAttrs = useFocusableGroup({
26
+ tabBehavior: focusMap[interactive ? 'no-tab' : focusMode]
17
27
  });
28
+ const interactiveFocusAttributes = {
29
+ ...groupperAttrs,
30
+ tabIndex: 0
31
+ };
18
32
  return {
33
+ interactive,
34
+ focusAttributes: focusMode === 'off' ? null : interactiveFocusAttributes
35
+ };
36
+ };
37
+ /**
38
+ * Create the state required to render Card.
39
+ *
40
+ * The returned state can be modified with hooks such as useCardStyles_unstable,
41
+ * before being passed to renderCard_unstable.
42
+ *
43
+ * @param props - props from this instance of Card
44
+ * @param ref - reference to the root element of Card
45
+ */
46
+ export const useCard_unstable = (props, ref) => {
47
+ const {
48
+ appearance = 'filled',
49
+ orientation = 'vertical',
50
+ size = 'medium'
51
+ } = props;
52
+ const [referenceId, setReferenceId] = React.useState(cardContextDefaultValue.selectableA11yProps.referenceId);
53
+ const [referenceLabel, setReferenceLabel] = React.useState(cardContextDefaultValue.selectableA11yProps.referenceId);
54
+ const cardBaseRef = useFocusWithin();
55
+ const {
56
+ selectable,
57
+ selected,
58
+ selectableCardProps,
59
+ selectFocused,
60
+ checkboxSlot,
61
+ floatingActionSlot
62
+ } = useCardSelectable(props, {
63
+ referenceId,
64
+ referenceLabel
65
+ }, cardBaseRef);
66
+ const cardRef = useMergedRefs(cardBaseRef, ref);
67
+ const {
68
+ interactive,
69
+ focusAttributes
70
+ } = useCardInteractive(props);
71
+ return {
72
+ appearance,
73
+ orientation,
74
+ size,
75
+ interactive,
76
+ selectable,
77
+ selectFocused,
78
+ selected,
79
+ selectableA11yProps: {
80
+ setReferenceId,
81
+ referenceId,
82
+ referenceLabel,
83
+ setReferenceLabel
84
+ },
19
85
  components: {
20
- root: 'div'
86
+ root: 'div',
87
+ floatingAction: 'div',
88
+ checkbox: 'input'
21
89
  },
22
- root: getNativeElementProps(props.as || 'div', __assign(__assign({
23
- ref: ref,
24
- role: 'group'
25
- }, groupperAttrs), props))
90
+ root: getNativeElementProps('div', {
91
+ ref: cardRef,
92
+ role: 'group',
93
+ ...focusAttributes,
94
+ ...props,
95
+ ...selectableCardProps
96
+ }),
97
+ floatingAction: floatingActionSlot,
98
+ checkbox: checkboxSlot
26
99
  };
27
100
  };
28
101
  //# sourceMappingURL=useCard.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Card/useCard.ts"],"names":[],"mappings":";AACA,SAAS,qBAAT,QAAsC,2BAAtC;AAEA,SAAS,iBAAT,EAA4B,yBAA5B,QAA6D,yBAA7D;AAEA;;;;;;;;AAQG;;AACH,OAAO,IAAM,OAAO,GAAG,UAAC,KAAD,EAAmB,GAAnB,EAA8C;AACnE,MAAM,aAAa,GAAG,iBAAiB,CAAC;AACtC,IAAA,WAAW,EAAE,yBAAyB,CAAC;AADD,GAAD,CAAvC;AAIA,SAAO;AACL,IAAA,UAAU,EAAE;AAAE,MAAA,IAAI,EAAE;AAAR,KADP;AAGL,IAAA,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,EAAN,IAAY,KAAb,EAAkB,QAAA,CAAA,QAAA,CAAA;AAC3C,MAAA,GAAG,EAAA,GADwC;AAE3C,MAAA,IAAI,EAAE;AAFqC,KAAA,EAGxC,aAHwC,CAAA,EAIxC,KAJwC,CAAlB;AAHtB,GAAP;AAUD,CAfM","sourceRoot":""}
1
+ {"version":3,"names":["React","getNativeElementProps","useMergedRefs","useFocusableGroup","useFocusWithin","useCardSelectable","cardContextDefaultValue","focusMap","off","undefined","useCardInteractive","focusMode","props","interactive","some","prop","groupperAttrs","tabBehavior","interactiveFocusAttributes","tabIndex","focusAttributes","useCard_unstable","ref","appearance","orientation","size","referenceId","setReferenceId","useState","selectableA11yProps","referenceLabel","setReferenceLabel","cardBaseRef","selectable","selected","selectableCardProps","selectFocused","checkboxSlot","floatingActionSlot","cardRef","components","root","floatingAction","checkbox","role"],"sources":["../src/packages/react-components/react-card/src/components/Card/useCard.ts"],"sourcesContent":["import * as React from 'react';\nimport { getNativeElementProps, useMergedRefs } from '@fluentui/react-utilities';\nimport { useFocusableGroup, useFocusWithin } from '@fluentui/react-tabster';\n\nimport type { CardProps, CardState } from './Card.types';\nimport { useCardSelectable } from './useCardSelectable';\nimport { cardContextDefaultValue } from './CardContext';\n\nconst focusMap = {\n off: undefined,\n 'no-tab': 'limited-trap-focus',\n 'tab-exit': 'limited',\n 'tab-only': 'unlimited',\n} as const;\n\n/**\n * Create the state for interactive cards.\n *\n * This internal hook defines if the card is interactive\n * and control focus properties based on that.\n *\n * @param props - props from this instance of Card\n */\nconst useCardInteractive = ({ focusMode = 'off', ...props }: CardProps) => {\n const interactive = (\n [\n 'onClick',\n 'onDoubleClick',\n 'onMouseUp',\n 'onMouseDown',\n 'onPointerUp',\n 'onPointerDown',\n 'onTouchStart',\n 'onTouchEnd',\n 'onDragStart',\n 'onDragEnd',\n ] as (keyof React.HTMLAttributes<HTMLElement>)[]\n ).some(prop => props[prop]);\n\n const groupperAttrs = useFocusableGroup({\n tabBehavior: focusMap[interactive ? 'no-tab' : focusMode],\n });\n\n const interactiveFocusAttributes = {\n ...groupperAttrs,\n tabIndex: 0,\n };\n\n return {\n interactive,\n focusAttributes: focusMode === 'off' ? null : interactiveFocusAttributes,\n };\n};\n\n/**\n * Create the state required to render Card.\n *\n * The returned state can be modified with hooks such as useCardStyles_unstable,\n * before being passed to renderCard_unstable.\n *\n * @param props - props from this instance of Card\n * @param ref - reference to the root element of Card\n */\nexport const useCard_unstable = (props: CardProps, ref: React.Ref<HTMLDivElement>): CardState => {\n const { appearance = 'filled', orientation = 'vertical', size = 'medium' } = props;\n\n const [referenceId, setReferenceId] = React.useState(cardContextDefaultValue.selectableA11yProps.referenceId);\n const [referenceLabel, setReferenceLabel] = React.useState(cardContextDefaultValue.selectableA11yProps.referenceId);\n\n const cardBaseRef = useFocusWithin<HTMLDivElement>();\n const { selectable, selected, selectableCardProps, selectFocused, checkboxSlot, floatingActionSlot } =\n useCardSelectable(props, { referenceId, referenceLabel }, cardBaseRef);\n\n const cardRef = useMergedRefs(cardBaseRef, ref);\n\n const { interactive, focusAttributes } = useCardInteractive(props);\n\n return {\n appearance,\n orientation,\n size,\n interactive,\n selectable,\n selectFocused,\n selected,\n selectableA11yProps: {\n setReferenceId,\n referenceId,\n referenceLabel,\n setReferenceLabel,\n },\n\n components: {\n root: 'div',\n floatingAction: 'div',\n checkbox: 'input',\n },\n\n root: getNativeElementProps('div', {\n ref: cardRef,\n role: 'group',\n ...focusAttributes,\n ...props,\n ...selectableCardProps,\n }),\n\n floatingAction: floatingActionSlot,\n checkbox: checkboxSlot,\n };\n};\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,qBAAqB,EAAEC,aAAa,QAAQ,2BAA2B;AAChF,SAASC,iBAAiB,EAAEC,cAAc,QAAQ,yBAAyB;AAG3E,SAASC,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,uBAAuB,QAAQ,eAAe;AAEvD,MAAMC,QAAQ,GAAG;EACfC,GAAG,EAAEC,SAAS;EACd,QAAQ,EAAE,oBAAoB;EAC9B,UAAU,EAAE,SAAS;EACrB,UAAU,EAAE;CACJ;AAEV;;;;;;;;AAQA,MAAMC,kBAAkB,GAAGA,CAAC;EAAEC,SAAS,GAAG,KAAK;EAAE,GAAGC;AAAK,CAAa,KAAI;EACxE,MAAMC,WAAW,GACf,CACE,SAAS,EACT,eAAe,EACf,WAAW,EACX,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,CAEd,CAACC,IAAI,CAACC,IAAI,IAAIH,KAAK,CAACG,IAAI,CAAC,CAAC;EAE3B,MAAMC,aAAa,GAAGb,iBAAiB,CAAC;IACtCc,WAAW,EAAEV,QAAQ,CAACM,WAAW,GAAG,QAAQ,GAAGF,SAAS;GACzD,CAAC;EAEF,MAAMO,0BAA0B,GAAG;IACjC,GAAGF,aAAa;IAChBG,QAAQ,EAAE;GACX;EAED,OAAO;IACLN,WAAW;IACXO,eAAe,EAAET,SAAS,KAAK,KAAK,GAAG,IAAI,GAAGO;GAC/C;AACH,CAAC;AAED;;;;;;;;;AASA,OAAO,MAAMG,gBAAgB,GAAGA,CAACT,KAAgB,EAAEU,GAA8B,KAAe;EAC9F,MAAM;IAAEC,UAAU,GAAG,QAAQ;IAAEC,WAAW,GAAG,UAAU;IAAEC,IAAI,GAAG;EAAQ,CAAE,GAAGb,KAAK;EAElF,MAAM,CAACc,WAAW,EAAEC,cAAc,CAAC,GAAG3B,KAAK,CAAC4B,QAAQ,CAACtB,uBAAuB,CAACuB,mBAAmB,CAACH,WAAW,CAAC;EAC7G,MAAM,CAACI,cAAc,EAAEC,iBAAiB,CAAC,GAAG/B,KAAK,CAAC4B,QAAQ,CAACtB,uBAAuB,CAACuB,mBAAmB,CAACH,WAAW,CAAC;EAEnH,MAAMM,WAAW,GAAG5B,cAAc,EAAkB;EACpD,MAAM;IAAE6B,UAAU;IAAEC,QAAQ;IAAEC,mBAAmB;IAAEC,aAAa;IAAEC,YAAY;IAAEC;EAAkB,CAAE,GAClGjC,iBAAiB,CAACO,KAAK,EAAE;IAAEc,WAAW;IAAEI;EAAc,CAAE,EAAEE,WAAW,CAAC;EAExE,MAAMO,OAAO,GAAGrC,aAAa,CAAC8B,WAAW,EAAEV,GAAG,CAAC;EAE/C,MAAM;IAAET,WAAW;IAAEO;EAAe,CAAE,GAAGV,kBAAkB,CAACE,KAAK,CAAC;EAElE,OAAO;IACLW,UAAU;IACVC,WAAW;IACXC,IAAI;IACJZ,WAAW;IACXoB,UAAU;IACVG,aAAa;IACbF,QAAQ;IACRL,mBAAmB,EAAE;MACnBF,cAAc;MACdD,WAAW;MACXI,cAAc;MACdC;KACD;IAEDS,UAAU,EAAE;MACVC,IAAI,EAAE,KAAK;MACXC,cAAc,EAAE,KAAK;MACrBC,QAAQ,EAAE;KACX;IAEDF,IAAI,EAAExC,qBAAqB,CAAC,KAAK,EAAE;MACjCqB,GAAG,EAAEiB,OAAO;MACZK,IAAI,EAAE,OAAO;MACb,GAAGxB,eAAe;MAClB,GAAGR,KAAK;MACR,GAAGuB;KACJ,CAAC;IAEFO,cAAc,EAAEJ,kBAAkB;IAClCK,QAAQ,EAAEN;GACX;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ export function useCardContextValue({
2
+ selectableA11yProps
3
+ }) {
4
+ return {
5
+ selectableA11yProps
6
+ };
7
+ }
8
+ //# sourceMappingURL=useCardContextValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCardContextValue","selectableA11yProps"],"sources":["../src/packages/react-components/react-card/src/components/Card/useCardContextValue.ts"],"sourcesContent":["import type { CardContextValue, CardState } from './Card.types';\n\nexport function useCardContextValue({ selectableA11yProps }: CardState): CardContextValue {\n return { selectableA11yProps };\n}\n"],"mappings":"AAEA,OAAM,SAAUA,mBAAmBA,CAAC;EAAEC;AAAmB,CAAa;EACpE,OAAO;IAAEA;EAAmB,CAAE;AAChC"}
@@ -0,0 +1,116 @@
1
+ import * as React from 'react';
2
+ import { mergeCallbacks, resolveShorthand } from '@fluentui/react-utilities';
3
+ import { Enter } from '@fluentui/keyboard-keys';
4
+ import { useFocusFinders } from '@fluentui/react-tabster';
5
+ /**
6
+ * @internal
7
+ *
8
+ * Create the state related to selectable cards.
9
+ *
10
+ * This internal hook controls all the logic for selectable cards and is
11
+ * intended to be used alongside with useCard_unstable.
12
+ *
13
+ * @param props - props from this instance of Card
14
+ * @param a11yProps - accessibility props shared between elements of the card
15
+ * @param ref - reference to the root element of Card
16
+ */
17
+ export const useCardSelectable = (props, {
18
+ referenceLabel,
19
+ referenceId
20
+ }, cardRef) => {
21
+ const {
22
+ checkbox = {},
23
+ selected,
24
+ defaultSelected,
25
+ onSelectionChange,
26
+ floatingAction,
27
+ onClick,
28
+ onKeyDown
29
+ } = props;
30
+ const {
31
+ findAllFocusable
32
+ } = useFocusFinders();
33
+ const checkboxRef = React.useRef(null);
34
+ const isSelectable = [selected, defaultSelected, onSelectionChange].some(prop => typeof prop !== 'undefined');
35
+ const [isCardSelected, setIsCardSelected] = React.useState(false);
36
+ const [isSelectFocused, setIsSelectFocused] = React.useState(false);
37
+ const shouldRestrictTriggerAction = React.useCallback(event => {
38
+ if (!cardRef.current) {
39
+ return false;
40
+ }
41
+ const focusableElements = findAllFocusable(cardRef.current);
42
+ const target = event.target;
43
+ const isElementInFocusableGroup = focusableElements.some(element => element.contains(target));
44
+ const isCheckboxSlot = (checkboxRef === null || checkboxRef === void 0 ? void 0 : checkboxRef.current) === target;
45
+ return isElementInFocusableGroup && !isCheckboxSlot;
46
+ }, [cardRef, findAllFocusable]);
47
+ const onChangeHandler = React.useCallback(event => {
48
+ if (shouldRestrictTriggerAction(event)) {
49
+ return;
50
+ }
51
+ const newCheckedValue = !isCardSelected;
52
+ setIsCardSelected(newCheckedValue);
53
+ if (onSelectionChange) {
54
+ onSelectionChange(event, {
55
+ selected: newCheckedValue
56
+ });
57
+ }
58
+ }, [onSelectionChange, isCardSelected, shouldRestrictTriggerAction]);
59
+ const onKeyDownHandler = React.useCallback(event => {
60
+ if ([Enter].includes(event.key)) {
61
+ event.preventDefault();
62
+ onChangeHandler(event);
63
+ }
64
+ }, [onChangeHandler]);
65
+ const checkboxSlot = React.useMemo(() => {
66
+ if (!isSelectable || floatingAction) {
67
+ return;
68
+ }
69
+ const selectableCheckboxProps = {};
70
+ if (referenceId) {
71
+ selectableCheckboxProps['aria-labelledby'] = referenceId;
72
+ } else if (referenceLabel) {
73
+ selectableCheckboxProps['aria-label'] = referenceLabel;
74
+ }
75
+ return resolveShorthand(checkbox, {
76
+ defaultProps: {
77
+ ref: checkboxRef,
78
+ type: 'checkbox',
79
+ checked: isCardSelected,
80
+ onChange: event => onChangeHandler(event),
81
+ onFocus: () => setIsSelectFocused(true),
82
+ onBlur: () => setIsSelectFocused(false),
83
+ ...selectableCheckboxProps
84
+ }
85
+ });
86
+ }, [checkbox, floatingAction, isCardSelected, isSelectable, onChangeHandler, referenceId, referenceLabel]);
87
+ const floatingActionSlot = React.useMemo(() => {
88
+ if (!floatingAction) {
89
+ return;
90
+ }
91
+ return resolveShorthand(floatingAction, {
92
+ defaultProps: {
93
+ ref: checkboxRef
94
+ }
95
+ });
96
+ }, [floatingAction]);
97
+ const selectableCardProps = React.useMemo(() => {
98
+ if (!isSelectable) {
99
+ return null;
100
+ }
101
+ return {
102
+ onClick: mergeCallbacks(onClick, onChangeHandler),
103
+ onKeyDown: mergeCallbacks(onKeyDown, onKeyDownHandler)
104
+ };
105
+ }, [isSelectable, onChangeHandler, onClick, onKeyDown, onKeyDownHandler]);
106
+ React.useEffect(() => setIsCardSelected(Boolean(defaultSelected !== null && defaultSelected !== void 0 ? defaultSelected : selected)), [defaultSelected, selected, setIsCardSelected]);
107
+ return {
108
+ selected: isCardSelected,
109
+ selectable: isSelectable,
110
+ selectFocused: isSelectFocused,
111
+ selectableCardProps,
112
+ checkboxSlot,
113
+ floatingActionSlot
114
+ };
115
+ };
116
+ //# sourceMappingURL=useCardSelectable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","mergeCallbacks","resolveShorthand","Enter","useFocusFinders","useCardSelectable","props","referenceLabel","referenceId","cardRef","checkbox","selected","defaultSelected","onSelectionChange","floatingAction","onClick","onKeyDown","findAllFocusable","checkboxRef","useRef","isSelectable","some","prop","isCardSelected","setIsCardSelected","useState","isSelectFocused","setIsSelectFocused","shouldRestrictTriggerAction","useCallback","event","current","focusableElements","target","isElementInFocusableGroup","element","contains","isCheckboxSlot","onChangeHandler","newCheckedValue","onKeyDownHandler","includes","key","preventDefault","checkboxSlot","useMemo","selectableCheckboxProps","defaultProps","ref","type","checked","onChange","onFocus","onBlur","floatingActionSlot","selectableCardProps","useEffect","Boolean","selectable","selectFocused"],"sources":["../src/packages/react-components/react-card/src/components/Card/useCardSelectable.ts"],"sourcesContent":["import * as React from 'react';\nimport { mergeCallbacks, resolveShorthand } from '@fluentui/react-utilities';\nimport { Enter } from '@fluentui/keyboard-keys';\nimport { useFocusFinders } from '@fluentui/react-tabster';\n\nimport type { CardContextValue, CardOnSelectionChangeEvent, CardProps, CardSlots } from './Card.types';\n\n/**\n * @internal\n *\n * Create the state related to selectable cards.\n *\n * This internal hook controls all the logic for selectable cards and is\n * intended to be used alongside with useCard_unstable.\n *\n * @param props - props from this instance of Card\n * @param a11yProps - accessibility props shared between elements of the card\n * @param ref - reference to the root element of Card\n */\nexport const useCardSelectable = (\n props: CardProps,\n { referenceLabel, referenceId }: Pick<CardContextValue['selectableA11yProps'], 'referenceId' | 'referenceLabel'>,\n cardRef: React.RefObject<HTMLDivElement>,\n) => {\n const { checkbox = {}, selected, defaultSelected, onSelectionChange, floatingAction, onClick, onKeyDown } = props;\n\n const { findAllFocusable } = useFocusFinders();\n\n const checkboxRef = React.useRef<HTMLInputElement>(null);\n\n const isSelectable = [selected, defaultSelected, onSelectionChange].some(prop => typeof prop !== 'undefined');\n\n const [isCardSelected, setIsCardSelected] = React.useState(false);\n const [isSelectFocused, setIsSelectFocused] = React.useState(false);\n\n const shouldRestrictTriggerAction = React.useCallback(\n (event: CardOnSelectionChangeEvent) => {\n if (!cardRef.current) {\n return false;\n }\n\n const focusableElements = findAllFocusable(cardRef.current);\n const target = event.target as HTMLElement;\n const isElementInFocusableGroup = focusableElements.some(element => element.contains(target));\n const isCheckboxSlot = checkboxRef?.current === target;\n\n return isElementInFocusableGroup && !isCheckboxSlot;\n },\n [cardRef, findAllFocusable],\n );\n\n const onChangeHandler = React.useCallback(\n (event: CardOnSelectionChangeEvent) => {\n if (shouldRestrictTriggerAction(event)) {\n return;\n }\n\n const newCheckedValue = !isCardSelected;\n\n setIsCardSelected(newCheckedValue);\n\n if (onSelectionChange) {\n onSelectionChange(event, { selected: newCheckedValue });\n }\n },\n [onSelectionChange, isCardSelected, shouldRestrictTriggerAction],\n );\n\n const onKeyDownHandler = React.useCallback(\n (event: React.KeyboardEvent<HTMLElement>) => {\n if ([Enter].includes(event.key)) {\n event.preventDefault();\n onChangeHandler(event);\n }\n },\n [onChangeHandler],\n );\n\n const checkboxSlot = React.useMemo(() => {\n if (!isSelectable || floatingAction) {\n return;\n }\n\n const selectableCheckboxProps: CardSlots['checkbox'] = {};\n\n if (referenceId) {\n selectableCheckboxProps['aria-labelledby'] = referenceId;\n } else if (referenceLabel) {\n selectableCheckboxProps['aria-label'] = referenceLabel;\n }\n\n return resolveShorthand(checkbox, {\n defaultProps: {\n ref: checkboxRef,\n type: 'checkbox',\n checked: isCardSelected,\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => onChangeHandler(event),\n onFocus: () => setIsSelectFocused(true),\n onBlur: () => setIsSelectFocused(false),\n ...selectableCheckboxProps,\n },\n });\n }, [checkbox, floatingAction, isCardSelected, isSelectable, onChangeHandler, referenceId, referenceLabel]);\n\n const floatingActionSlot = React.useMemo(() => {\n if (!floatingAction) {\n return;\n }\n\n return resolveShorthand(floatingAction, {\n defaultProps: {\n ref: checkboxRef,\n },\n });\n }, [floatingAction]);\n\n const selectableCardProps = React.useMemo(() => {\n if (!isSelectable) {\n return null;\n }\n\n return {\n onClick: mergeCallbacks(onClick, onChangeHandler),\n onKeyDown: mergeCallbacks(onKeyDown, onKeyDownHandler),\n };\n }, [isSelectable, onChangeHandler, onClick, onKeyDown, onKeyDownHandler]);\n\n React.useEffect(\n () => setIsCardSelected(Boolean(defaultSelected ?? selected)),\n [defaultSelected, selected, setIsCardSelected],\n );\n\n return {\n selected: isCardSelected,\n selectable: isSelectable,\n selectFocused: isSelectFocused,\n selectableCardProps,\n checkboxSlot,\n floatingActionSlot,\n };\n};\n"],"mappings":"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"}