@fluentui/react-card 9.0.0-beta.4 → 9.0.0-beta.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +1756 -9
- package/CHANGELOG.md +530 -40
- package/README.md +68 -4
- package/dist/index.d.ts +388 -0
- package/lib/Card.js.map +1 -1
- package/lib/CardFooter.js.map +1 -1
- package/lib/CardHeader.js.map +1 -1
- package/lib/CardPreview.js.map +1 -1
- package/lib/components/Card/Card.js +8 -7
- package/lib/components/Card/Card.js.map +1 -1
- package/lib/components/Card/Card.types.js.map +1 -1
- package/lib/components/Card/CardContext.js +29 -0
- package/lib/components/Card/CardContext.js.map +1 -0
- package/lib/components/Card/index.js +1 -0
- package/lib/components/Card/index.js.map +1 -1
- package/lib/components/Card/renderCard.js +12 -4
- package/lib/components/Card/renderCard.js.map +1 -1
- package/lib/components/Card/useCard.js +87 -15
- package/lib/components/Card/useCard.js.map +1 -1
- package/lib/components/Card/useCardContextValue.js +8 -0
- package/lib/components/Card/useCardContextValue.js.map +1 -0
- package/lib/components/Card/useCardSelectable.js +105 -0
- package/lib/components/Card/useCardSelectable.js.map +1 -0
- package/lib/components/Card/useCardStyles.js +326 -34
- package/lib/components/Card/useCardStyles.js.map +1 -1
- package/lib/components/CardFooter/CardFooter.js +6 -7
- package/lib/components/CardFooter/CardFooter.js.map +1 -1
- package/lib/components/CardFooter/CardFooter.types.js.map +1 -1
- package/lib/components/CardFooter/index.js.map +1 -1
- package/lib/components/CardFooter/renderCardFooter.js +8 -6
- package/lib/components/CardFooter/renderCardFooter.js.map +1 -1
- package/lib/components/CardFooter/useCardFooter.js +3 -9
- package/lib/components/CardFooter/useCardFooter.js.map +1 -1
- package/lib/components/CardFooter/useCardFooterStyles.js +18 -19
- package/lib/components/CardFooter/useCardFooterStyles.js.map +1 -1
- package/lib/components/CardHeader/CardHeader.js +6 -7
- package/lib/components/CardHeader/CardHeader.js.map +1 -1
- package/lib/components/CardHeader/CardHeader.types.js.map +1 -1
- package/lib/components/CardHeader/index.js.map +1 -1
- package/lib/components/CardHeader/renderCardHeader.js +14 -6
- package/lib/components/CardHeader/renderCardHeader.js.map +1 -1
- package/lib/components/CardHeader/useCardHeader.js +31 -18
- package/lib/components/CardHeader/useCardHeader.js.map +1 -1
- package/lib/components/CardHeader/useCardHeaderStyles.js +51 -39
- package/lib/components/CardHeader/useCardHeaderStyles.js.map +1 -1
- package/lib/components/CardPreview/CardPreview.js +6 -7
- package/lib/components/CardPreview/CardPreview.js.map +1 -1
- package/lib/components/CardPreview/CardPreview.types.js.map +1 -1
- package/lib/components/CardPreview/index.js.map +1 -1
- package/lib/components/CardPreview/renderCardPreview.js +8 -6
- package/lib/components/CardPreview/renderCardPreview.js.map +1 -1
- package/lib/components/CardPreview/useCardPreview.js +36 -11
- package/lib/components/CardPreview/useCardPreview.js.map +1 -1
- package/lib/components/CardPreview/useCardPreviewStyles.js +22 -27
- package/lib/components/CardPreview/useCardPreviewStyles.js.map +1 -1
- package/lib/index.js +5 -4
- package/lib/index.js.map +1 -1
- package/lib-commonjs/Card.js +0 -2
- package/lib-commonjs/Card.js.map +1 -1
- package/lib-commonjs/CardFooter.js +0 -2
- package/lib-commonjs/CardFooter.js.map +1 -1
- package/lib-commonjs/CardHeader.js +0 -2
- package/lib-commonjs/CardHeader.js.map +1 -1
- package/lib-commonjs/CardPreview.js +0 -2
- package/lib-commonjs/CardPreview.js.map +1 -1
- package/lib-commonjs/components/Card/Card.js +5 -9
- package/lib-commonjs/components/Card/Card.js.map +1 -1
- package/lib-commonjs/components/Card/Card.types.js.map +1 -1
- package/lib-commonjs/components/Card/CardContext.js +36 -0
- package/lib-commonjs/components/Card/CardContext.js.map +1 -0
- package/lib-commonjs/components/Card/index.js +1 -6
- package/lib-commonjs/components/Card/index.js.map +1 -1
- package/lib-commonjs/components/Card/renderCard.js +14 -10
- package/lib-commonjs/components/Card/renderCard.js.map +1 -1
- package/lib-commonjs/components/Card/useCard.js +87 -19
- package/lib-commonjs/components/Card/useCard.js.map +1 -1
- package/lib-commonjs/components/Card/useCardContextValue.js +15 -0
- package/lib-commonjs/components/Card/useCardContextValue.js.map +1 -0
- package/lib-commonjs/components/Card/useCardSelectable.js +112 -0
- package/lib-commonjs/components/Card/useCardSelectable.js.map +1 -0
- package/lib-commonjs/components/Card/useCardStyles.js +329 -41
- package/lib-commonjs/components/Card/useCardStyles.js.map +1 -1
- package/lib-commonjs/components/CardFooter/CardFooter.js +3 -9
- package/lib-commonjs/components/CardFooter/CardFooter.js.map +1 -1
- package/lib-commonjs/components/CardFooter/CardFooter.types.js.map +1 -1
- package/lib-commonjs/components/CardFooter/index.js +0 -6
- package/lib-commonjs/components/CardFooter/index.js.map +1 -1
- package/lib-commonjs/components/CardFooter/renderCardFooter.js +10 -13
- package/lib-commonjs/components/CardFooter/renderCardFooter.js.map +1 -1
- package/lib-commonjs/components/CardFooter/useCardFooter.js +5 -14
- package/lib-commonjs/components/CardFooter/useCardFooter.js.map +1 -1
- package/lib-commonjs/components/CardFooter/useCardFooterStyles.js +21 -25
- package/lib-commonjs/components/CardFooter/useCardFooterStyles.js.map +1 -1
- package/lib-commonjs/components/CardHeader/CardHeader.js +3 -9
- package/lib-commonjs/components/CardHeader/CardHeader.js.map +1 -1
- package/lib-commonjs/components/CardHeader/CardHeader.types.js.map +1 -1
- package/lib-commonjs/components/CardHeader/index.js +0 -6
- package/lib-commonjs/components/CardHeader/index.js.map +1 -1
- package/lib-commonjs/components/CardHeader/renderCardHeader.js +16 -13
- package/lib-commonjs/components/CardHeader/renderCardHeader.js.map +1 -1
- package/lib-commonjs/components/CardHeader/useCardHeader.js +32 -23
- package/lib-commonjs/components/CardHeader/useCardHeader.js.map +1 -1
- package/lib-commonjs/components/CardHeader/useCardHeaderStyles.js +54 -45
- package/lib-commonjs/components/CardHeader/useCardHeaderStyles.js.map +1 -1
- package/lib-commonjs/components/CardPreview/CardPreview.js +3 -9
- package/lib-commonjs/components/CardPreview/CardPreview.js.map +1 -1
- package/lib-commonjs/components/CardPreview/CardPreview.types.js.map +1 -1
- package/lib-commonjs/components/CardPreview/index.js +0 -6
- package/lib-commonjs/components/CardPreview/index.js.map +1 -1
- package/lib-commonjs/components/CardPreview/renderCardPreview.js +10 -13
- package/lib-commonjs/components/CardPreview/renderCardPreview.js.map +1 -1
- package/lib-commonjs/components/CardPreview/useCardPreview.js +37 -15
- package/lib-commonjs/components/CardPreview/useCardPreview.js.map +1 -1
- package/lib-commonjs/components/CardPreview/useCardPreviewStyles.js +25 -33
- package/lib-commonjs/components/CardPreview/useCardPreviewStyles.js.map +1 -1
- package/lib-commonjs/index.js +150 -10
- package/lib-commonjs/index.js.map +1 -1
- package/package.json +30 -29
- package/assets/ai_deck_template.png +0 -0
- package/assets/avatar_elvia.svg +0 -9
- package/assets/avatar_mauricio.svg +0 -9
- package/assets/doc_template.png +0 -0
- package/assets/powerpoint_logo.svg +0 -9
- package/assets/sales_template.png +0 -0
- package/assets/word_logo.svg +0 -9
- package/dist/react-card.d.ts +0 -196
- package/lib/Card.d.ts +0 -1
- package/lib/CardFooter.d.ts +0 -1
- package/lib/CardHeader.d.ts +0 -1
- package/lib/CardPreview.d.ts +0 -1
- package/lib/common/isConformant.d.ts +0 -4
- package/lib/common/isConformant.js +0 -11
- package/lib/common/isConformant.js.map +0 -1
- package/lib/components/Card/Card.d.ts +0 -6
- package/lib/components/Card/Card.types.d.ts +0 -13
- package/lib/components/Card/index.d.ts +0 -5
- package/lib/components/Card/renderCard.d.ts +0 -5
- package/lib/components/Card/useCard.d.ts +0 -12
- package/lib/components/Card/useCardStyles.d.ts +0 -6
- package/lib/components/CardFooter/CardFooter.d.ts +0 -6
- package/lib/components/CardFooter/CardFooter.types.d.ts +0 -13
- package/lib/components/CardFooter/index.d.ts +0 -5
- package/lib/components/CardFooter/renderCardFooter.d.ts +0 -5
- package/lib/components/CardFooter/useCardFooter.d.ts +0 -16
- package/lib/components/CardFooter/useCardFooterStyles.d.ts +0 -6
- package/lib/components/CardHeader/CardHeader.d.ts +0 -6
- package/lib/components/CardHeader/CardHeader.types.d.ts +0 -17
- package/lib/components/CardHeader/index.d.ts +0 -5
- package/lib/components/CardHeader/renderCardHeader.d.ts +0 -5
- package/lib/components/CardHeader/useCardHeader.d.ts +0 -13
- package/lib/components/CardHeader/useCardHeaderStyles.d.ts +0 -6
- package/lib/components/CardPreview/CardPreview.d.ts +0 -6
- package/lib/components/CardPreview/CardPreview.types.d.ts +0 -13
- package/lib/components/CardPreview/index.d.ts +0 -5
- package/lib/components/CardPreview/renderCardPreview.d.ts +0 -5
- package/lib/components/CardPreview/useCardPreview.d.ts +0 -16
- package/lib/components/CardPreview/useCardPreviewStyles.d.ts +0 -6
- package/lib/index.d.ts +0 -4
- package/lib/tsdoc-metadata.json +0 -11
- package/lib-commonjs/Card.d.ts +0 -1
- package/lib-commonjs/CardFooter.d.ts +0 -1
- package/lib-commonjs/CardHeader.d.ts +0 -1
- package/lib-commonjs/CardPreview.d.ts +0 -1
- package/lib-commonjs/common/isConformant.d.ts +0 -4
- package/lib-commonjs/common/isConformant.js +0 -22
- package/lib-commonjs/common/isConformant.js.map +0 -1
- package/lib-commonjs/components/Card/Card.d.ts +0 -6
- package/lib-commonjs/components/Card/Card.types.d.ts +0 -13
- package/lib-commonjs/components/Card/index.d.ts +0 -5
- package/lib-commonjs/components/Card/renderCard.d.ts +0 -5
- package/lib-commonjs/components/Card/useCard.d.ts +0 -12
- package/lib-commonjs/components/Card/useCardStyles.d.ts +0 -6
- package/lib-commonjs/components/CardFooter/CardFooter.d.ts +0 -6
- package/lib-commonjs/components/CardFooter/CardFooter.types.d.ts +0 -13
- package/lib-commonjs/components/CardFooter/index.d.ts +0 -5
- package/lib-commonjs/components/CardFooter/renderCardFooter.d.ts +0 -5
- package/lib-commonjs/components/CardFooter/useCardFooter.d.ts +0 -16
- package/lib-commonjs/components/CardFooter/useCardFooterStyles.d.ts +0 -6
- package/lib-commonjs/components/CardHeader/CardHeader.d.ts +0 -6
- package/lib-commonjs/components/CardHeader/CardHeader.types.d.ts +0 -17
- package/lib-commonjs/components/CardHeader/index.d.ts +0 -5
- package/lib-commonjs/components/CardHeader/renderCardHeader.d.ts +0 -5
- package/lib-commonjs/components/CardHeader/useCardHeader.d.ts +0 -13
- package/lib-commonjs/components/CardHeader/useCardHeaderStyles.d.ts +0 -6
- package/lib-commonjs/components/CardPreview/CardPreview.d.ts +0 -6
- package/lib-commonjs/components/CardPreview/CardPreview.types.d.ts +0 -13
- package/lib-commonjs/components/CardPreview/index.d.ts +0 -5
- package/lib-commonjs/components/CardPreview/renderCardPreview.d.ts +0 -5
- package/lib-commonjs/components/CardPreview/useCardPreview.d.ts +0 -16
- package/lib-commonjs/components/CardPreview/useCardPreviewStyles.d.ts +0 -6
- package/lib-commonjs/index.d.ts +0 -4
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"
|
1
|
+
{"version":3,"mappings":";;;;;;AAAAA","names":["tslib_1"],"sourceRoot":"../src/","sources":["packages/react-components/react-card/src/CardFooter.ts"],"sourcesContent":["export * from './components/CardFooter/index';\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"
|
1
|
+
{"version":3,"mappings":";;;;;;AAAAA","names":["tslib_1"],"sourceRoot":"../src/","sources":["packages/react-components/react-card/src/CardHeader.ts"],"sourcesContent":["export * from './components/CardHeader/index';\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"
|
1
|
+
{"version":3,"mappings":";;;;;;AAAAA","names":["tslib_1"],"sourceRoot":"../src/","sources":["packages/react-components/react-card/src/CardPreview.ts"],"sourcesContent":["export * from './components/CardPreview/index';\n"]}
|
@@ -4,23 +4,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.Card = void 0;
|
7
|
-
|
8
7
|
const React = /*#__PURE__*/require("react");
|
9
|
-
|
10
8
|
const useCard_1 = /*#__PURE__*/require("./useCard");
|
11
|
-
|
12
9
|
const renderCard_1 = /*#__PURE__*/require("./renderCard");
|
13
|
-
|
14
10
|
const useCardStyles_1 = /*#__PURE__*/require("./useCardStyles");
|
11
|
+
const useCardContextValue_1 = /*#__PURE__*/require("./useCardContextValue");
|
15
12
|
/**
|
16
13
|
* A card provides scaffolding for hosting actions and content for a single topic.
|
17
14
|
*/
|
18
|
-
|
19
|
-
|
20
15
|
exports.Card = /*#__PURE__*/React.forwardRef((props, ref) => {
|
21
|
-
const state = useCard_1.
|
22
|
-
|
23
|
-
|
16
|
+
const state = useCard_1.useCard_unstable(props, ref);
|
17
|
+
const cardContextValue = useCardContextValue_1.useCardContextValue(state);
|
18
|
+
useCardStyles_1.useCardStyles_unstable(state);
|
19
|
+
return renderCard_1.renderCard_unstable(state, cardContextValue);
|
24
20
|
});
|
25
21
|
exports.Card.displayName = 'Card';
|
26
22
|
//# sourceMappingURL=Card.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"
|
1
|
+
{"version":3,"mappings":";;;;;;AAAA;AACA;AACA;AACA;AAGA;AAEA;;;AAGaA,YAAI,gBAAmCC,KAAK,CAACC,UAAU,CAAiB,CAACC,KAAK,EAAEC,GAAG,KAAI;EAClG,MAAMC,KAAK,GAAGC,0BAAgB,CAACH,KAAK,EAAEC,GAAG,CAAC;EAC1C,MAAMG,gBAAgB,GAAGC,yCAAmB,CAACH,KAAK,CAAC;EAEnDI,sCAAsB,CAACJ,KAAK,CAAC;EAC7B,OAAOK,gCAAmB,CAACL,KAAK,EAAEE,gBAAgB,CAAC;AACrD,CAAC,CAAC;AAEFP,YAAI,CAACW,WAAW,GAAG,MAAM","names":["exports","React","forwardRef","props","ref","state","useCard_1","cardContextValue","useCardContextValue_1","useCardStyles_1","renderCard_1","displayName"],"sourceRoot":"../src/","sources":["packages/react-components/react-card/src/components/Card/Card.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useCard_unstable } from './useCard';\nimport { renderCard_unstable } from './renderCard';\nimport { useCardStyles_unstable } from './useCardStyles';\nimport type { CardProps } from './Card.types';\nimport type { ForwardRefComponent } from '@fluentui/react-utilities';\nimport { useCardContextValue } from './useCardContextValue';\n\n/**\n * A card provides scaffolding for hosting actions and content for a single topic.\n */\nexport const Card: ForwardRefComponent<CardProps> = React.forwardRef<HTMLDivElement>((props, ref) => {\n const state = useCard_unstable(props, ref);\n const cardContextValue = useCardContextValue(state);\n\n useCardStyles_unstable(state);\n return renderCard_unstable(state, cardContextValue);\n});\n\nCard.displayName = 'Card';\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"
|
1
|
+
{"version":3,"mappings":"","names":[],"sourceRoot":"../src/","sources":[],"sourcesContent":[]}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.useCardContext_unstable = exports.CardProvider = exports.cardContextDefaultValue = void 0;
|
7
|
+
const React = /*#__PURE__*/require("react");
|
8
|
+
const cardContext = /*#__PURE__*/React.createContext(undefined);
|
9
|
+
/**
|
10
|
+
* @internal
|
11
|
+
*/
|
12
|
+
exports.cardContextDefaultValue = {
|
13
|
+
selectableA11yProps: {
|
14
|
+
referenceId: undefined,
|
15
|
+
setReferenceId() {
|
16
|
+
/* Noop */
|
17
|
+
},
|
18
|
+
referenceLabel: undefined,
|
19
|
+
setReferenceLabel() {
|
20
|
+
/* Noop */
|
21
|
+
}
|
22
|
+
}
|
23
|
+
};
|
24
|
+
/**
|
25
|
+
* @internal
|
26
|
+
*/
|
27
|
+
exports.CardProvider = cardContext.Provider;
|
28
|
+
/**
|
29
|
+
* @internal
|
30
|
+
*/
|
31
|
+
const useCardContext_unstable = () => {
|
32
|
+
var _a;
|
33
|
+
return (_a = React.useContext(cardContext)) !== null && _a !== void 0 ? _a : exports.cardContextDefaultValue;
|
34
|
+
};
|
35
|
+
exports.useCardContext_unstable = useCardContext_unstable;
|
36
|
+
//# sourceMappingURL=CardContext.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"mappings":";;;;;;AAAA;AAGA,MAAMA,WAAW,gBAAGC,KAAK,CAACC,aAAa,CAA+BC,SAAS,CAAC;AAEhF;;;AAGaC,+BAAuB,GAAqB;EACvDC,mBAAmB,EAAE;IACnBC,WAAW,EAAEH,SAAS;IACtBI,cAAc;MACZ;IAAA,CACD;IACDC,cAAc,EAAEL,SAAS;IACzBM,iBAAiB;MACf;IAAA;;CAGL;AAED;;;AAGaL,oBAAY,GAAGJ,WAAW,CAACU,QAAQ;AAEhD;;;AAGO,MAAMC,uBAAuB,GAAG,MAAK;EAAA;EAAC,kBAAK,CAACC,UAAU,CAACZ,WAAW,CAAC,mCAAII,+BAAuB;AAAA;AAAxFA,+BAAuB","names":["cardContext","React","createContext","undefined","exports","selectableA11yProps","referenceId","setReferenceId","referenceLabel","setReferenceLabel","Provider","useCardContext_unstable","useContext"],"sourceRoot":"../src/","sources":["packages/react-components/react-card/src/components/Card/CardContext.ts"],"sourcesContent":["import * as React from 'react';\nimport { CardContextValue } from './Card.types';\n\nconst cardContext = React.createContext<CardContextValue | undefined>(undefined);\n\n/**\n * @internal\n */\nexport const cardContextDefaultValue: CardContextValue = {\n selectableA11yProps: {\n referenceId: undefined,\n setReferenceId() {\n /* Noop */\n },\n referenceLabel: undefined,\n setReferenceLabel() {\n /* Noop */\n },\n },\n};\n\n/**\n * @internal\n */\nexport const CardProvider = cardContext.Provider;\n\n/**\n * @internal\n */\nexport const useCardContext_unstable = () => React.useContext(cardContext) ?? cardContextDefaultValue;\n"]}
|
@@ -3,16 +3,11 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
|
7
6
|
const tslib_1 = /*#__PURE__*/require("tslib");
|
8
|
-
|
9
7
|
tslib_1.__exportStar(require("./Card"), exports);
|
10
|
-
|
11
8
|
tslib_1.__exportStar(require("./Card.types"), exports);
|
12
|
-
|
9
|
+
tslib_1.__exportStar(require("./CardContext"), exports);
|
13
10
|
tslib_1.__exportStar(require("./renderCard"), exports);
|
14
|
-
|
15
11
|
tslib_1.__exportStar(require("./useCard"), exports);
|
16
|
-
|
17
12
|
tslib_1.__exportStar(require("./useCardStyles"), exports);
|
18
13
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"
|
1
|
+
{"version":3,"mappings":";;;;;;AAAAA;AACAA;AACAA;AACAA;AACAA;AACAA","names":["tslib_1"],"sourceRoot":"../src/","sources":["packages/react-components/react-card/src/components/Card/index.ts"],"sourcesContent":["export * from './Card';\nexport * from './Card.types';\nexport * from './CardContext';\nexport * from './renderCard';\nexport * from './useCard';\nexport * from './useCardStyles';\n"]}
|
@@ -3,23 +3,27 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.
|
7
|
-
|
6
|
+
exports.renderCard_unstable = void 0;
|
8
7
|
const React = /*#__PURE__*/require("react");
|
9
|
-
|
10
8
|
const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
|
9
|
+
const CardContext_1 = /*#__PURE__*/require("./CardContext");
|
11
10
|
/**
|
12
|
-
* Render the final JSX of Card
|
11
|
+
* Render the final JSX of Card.
|
13
12
|
*/
|
14
|
-
|
15
|
-
|
16
|
-
const renderCard = state => {
|
13
|
+
const renderCard_unstable = (state, cardContextValue) => {
|
17
14
|
const {
|
18
15
|
slots,
|
19
16
|
slotProps
|
20
17
|
} = react_utilities_1.getSlots(state);
|
21
|
-
return React.createElement(slots.root,
|
18
|
+
return React.createElement(slots.root, {
|
19
|
+
...slotProps.root
|
20
|
+
}, React.createElement(CardContext_1.CardProvider, {
|
21
|
+
value: cardContextValue
|
22
|
+
}, slots.checkbox ? React.createElement(slots.checkbox, {
|
23
|
+
...slotProps.checkbox
|
24
|
+
}) : null, slots.floatingAction ? React.createElement(slots.floatingAction, {
|
25
|
+
...slotProps.floatingAction
|
26
|
+
}) : null, slotProps.root.children));
|
22
27
|
};
|
23
|
-
|
24
|
-
exports.renderCard = renderCard;
|
28
|
+
exports.renderCard_unstable = renderCard_unstable;
|
25
29
|
//# sourceMappingURL=renderCard.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"
|
1
|
+
{"version":3,"mappings":";;;;;;AAAA;AACA;AAEA;AAEA;;;AAGO,MAAMA,mBAAmB,GAAG,CAACC,KAAgB,EAAEC,gBAAkC,KAAI;EAC1F,MAAM;IAAEC,KAAK;IAAEC;EAAS,CAAE,GAAGC,0BAAQ,CAAYJ,KAAK,CAAC;EAEvD,OACEK,oBAACH,KAAK,CAACI,IAAI;IAAA,GAAKH,SAAS,CAACG;EAAI,GAC5BD,oBAACE,0BAAY;IAACC,KAAK,EAAEP;EAAgB,GAClCC,KAAK,CAACO,QAAQ,GAAGJ,oBAACH,KAAK,CAACO,QAAQ;IAAA,GAAKN,SAAS,CAACM;EAAQ,EAAI,GAAG,IAAI,EAClEP,KAAK,CAACQ,cAAc,GAAGL,oBAACH,KAAK,CAACQ,cAAc;IAAA,GAAKP,SAAS,CAACO;EAAc,EAAI,GAAG,IAAI,EACpFP,SAAS,CAACG,IAAI,CAACK,QAAQ,CACX,CACJ;AAEjB,CAAC;AAZYC,2BAAmB","names":["renderCard_unstable","state","cardContextValue","slots","slotProps","react_utilities_1","React","root","CardContext_1","value","checkbox","floatingAction","children","exports"],"sourceRoot":"../src/","sources":["packages/react-components/react-card/src/components/Card/renderCard.tsx"],"sourcesContent":["import * as React from 'react';\nimport { getSlots } from '@fluentui/react-utilities';\nimport type { CardContextValue, CardSlots, CardState } from './Card.types';\nimport { CardProvider } from './CardContext';\n\n/**\n * Render the final JSX of Card.\n */\nexport const renderCard_unstable = (state: CardState, cardContextValue: CardContextValue) => {\n const { slots, slotProps } = getSlots<CardSlots>(state);\n\n return (\n <slots.root {...slotProps.root}>\n <CardProvider value={cardContextValue}>\n {slots.checkbox ? <slots.checkbox {...slotProps.checkbox} /> : null}\n {slots.floatingAction ? <slots.floatingAction {...slotProps.floatingAction} /> : null}\n {slotProps.root.children}\n </CardProvider>\n </slots.root>\n );\n};\n"]}
|
@@ -3,38 +3,106 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.
|
7
|
-
|
6
|
+
exports.useCard_unstable = void 0;
|
7
|
+
const React = /*#__PURE__*/require("react");
|
8
8
|
const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
|
9
|
-
|
10
9
|
const react_tabster_1 = /*#__PURE__*/require("@fluentui/react-tabster");
|
10
|
+
const useCardSelectable_1 = /*#__PURE__*/require("./useCardSelectable");
|
11
|
+
const CardContext_1 = /*#__PURE__*/require("./CardContext");
|
12
|
+
const focusMap = {
|
13
|
+
off: undefined,
|
14
|
+
'no-tab': 'limited-trap-focus',
|
15
|
+
'tab-exit': 'limited',
|
16
|
+
'tab-only': 'unlimited'
|
17
|
+
};
|
11
18
|
/**
|
12
|
-
* Create the state
|
19
|
+
* Create the state for interactive cards.
|
13
20
|
*
|
14
|
-
*
|
15
|
-
*
|
21
|
+
* This internal hook defines if the card is interactive
|
22
|
+
* and control focus properties based on that.
|
16
23
|
*
|
17
24
|
* @param props - props from this instance of Card
|
18
|
-
* @param ref - reference to root HTMLElement of Card
|
19
25
|
*/
|
20
|
-
|
21
|
-
|
22
|
-
|
26
|
+
const useCardInteractive = ({
|
27
|
+
focusMode = 'off',
|
28
|
+
...props
|
29
|
+
}) => {
|
30
|
+
const interactive = ['onClick', 'onDoubleClick', 'onMouseUp', 'onMouseDown', 'onPointerUp', 'onPointerDown', 'onTouchStart', 'onTouchEnd', 'onDragStart', 'onDragEnd'].some(prop => props[prop]);
|
23
31
|
const groupperAttrs = react_tabster_1.useFocusableGroup({
|
24
|
-
tabBehavior: '
|
32
|
+
tabBehavior: focusMap[interactive ? 'no-tab' : focusMode]
|
25
33
|
});
|
34
|
+
const interactiveFocusAttributes = {
|
35
|
+
...groupperAttrs,
|
36
|
+
tabIndex: 0
|
37
|
+
};
|
38
|
+
return {
|
39
|
+
interactive,
|
40
|
+
focusAttributes: focusMode === 'off' ? null : interactiveFocusAttributes
|
41
|
+
};
|
42
|
+
};
|
43
|
+
/**
|
44
|
+
* Create the state required to render Card.
|
45
|
+
*
|
46
|
+
* The returned state can be modified with hooks such as useCardStyles_unstable,
|
47
|
+
* before being passed to renderCard_unstable.
|
48
|
+
*
|
49
|
+
* @param props - props from this instance of Card
|
50
|
+
* @param ref - reference to the root element of Card
|
51
|
+
*/
|
52
|
+
const useCard_unstable = (props, ref) => {
|
53
|
+
const {
|
54
|
+
appearance = 'filled',
|
55
|
+
orientation = 'vertical',
|
56
|
+
size = 'medium',
|
57
|
+
floatingAction
|
58
|
+
} = props;
|
59
|
+
const [referenceId, setReferenceId] = React.useState(CardContext_1.cardContextDefaultValue.selectableA11yProps.referenceId);
|
60
|
+
const [referenceLabel, setReferenceLabel] = React.useState(CardContext_1.cardContextDefaultValue.selectableA11yProps.referenceId);
|
61
|
+
const cardBaseRef = react_tabster_1.useFocusWithin();
|
62
|
+
const {
|
63
|
+
selectable,
|
64
|
+
selected,
|
65
|
+
selectableCardProps,
|
66
|
+
selectFocused,
|
67
|
+
checkboxSlot
|
68
|
+
} = useCardSelectable_1.useCardSelectable(props, {
|
69
|
+
referenceId,
|
70
|
+
referenceLabel
|
71
|
+
}, cardBaseRef);
|
72
|
+
const cardRef = react_utilities_1.useMergedRefs(cardBaseRef, ref);
|
73
|
+
const {
|
74
|
+
interactive,
|
75
|
+
focusAttributes
|
76
|
+
} = useCardInteractive(props);
|
26
77
|
return {
|
78
|
+
appearance,
|
79
|
+
orientation,
|
80
|
+
size,
|
81
|
+
interactive,
|
82
|
+
selectable,
|
83
|
+
selectFocused,
|
84
|
+
selected,
|
85
|
+
selectableA11yProps: {
|
86
|
+
setReferenceId,
|
87
|
+
referenceId,
|
88
|
+
referenceLabel,
|
89
|
+
setReferenceLabel
|
90
|
+
},
|
27
91
|
components: {
|
28
|
-
root: 'div'
|
92
|
+
root: 'div',
|
93
|
+
floatingAction: 'div',
|
94
|
+
checkbox: 'input'
|
29
95
|
},
|
30
|
-
root: react_utilities_1.getNativeElementProps(
|
31
|
-
ref,
|
96
|
+
root: react_utilities_1.getNativeElementProps('div', {
|
97
|
+
ref: cardRef,
|
32
98
|
role: 'group',
|
33
|
-
...
|
34
|
-
...props
|
35
|
-
|
99
|
+
...focusAttributes,
|
100
|
+
...props,
|
101
|
+
...selectableCardProps
|
102
|
+
}),
|
103
|
+
floatingAction: react_utilities_1.resolveShorthand(floatingAction),
|
104
|
+
checkbox: checkboxSlot
|
36
105
|
};
|
37
106
|
};
|
38
|
-
|
39
|
-
exports.useCard = useCard;
|
107
|
+
exports.useCard_unstable = useCard_unstable;
|
40
108
|
//# sourceMappingURL=useCard.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"
|
1
|
+
{"version":3,"mappings":";;;;;;AAAA;AACA;AACA;AAGA;AACA;AAEA,MAAMA,QAAQ,GAAG;EACfC,GAAG,EAAEC,SAAS;EACd,QAAQ,EAAE,oBAAoB;EAC9B,UAAU,EAAE,SAAS;EACrB,UAAU,EAAE;CACJ;AAEV;;;;;;;;AAQA,MAAMC,kBAAkB,GAAG,CAAC;EAAEC,SAAS,GAAG,KAAK;EAAE,GAAGC;AAAK,CAAa,KAAI;EACxE,MAAMC,WAAW,GAAI,CACnB,SAAS,EACT,eAAe,EACf,WAAW,EACX,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,CACoC,CAACC,IAAI,CAACC,IAAI,IAAIH,KAAK,CAACG,IAAI,CAAC,CAAC;EAE3E,MAAMC,aAAa,GAAGC,iCAAiB,CAAC;IACtCC,WAAW,EAAEX,QAAQ,CAACM,WAAW,GAAG,QAAQ,GAAGF,SAAS;GACzD,CAAC;EAEF,MAAMQ,0BAA0B,GAAG;IACjC,GAAGH,aAAa;IAChBI,QAAQ,EAAE;GACX;EAED,OAAO;IACLP,WAAW;IACXQ,eAAe,EAAEV,SAAS,KAAK,KAAK,GAAG,IAAI,GAAGQ;GAC/C;AACH,CAAC;AAED;;;;;;;;;AASO,MAAMG,gBAAgB,GAAG,CAACV,KAAgB,EAAEW,GAA8B,KAAe;EAC9F,MAAM;IAAEC,UAAU,GAAG,QAAQ;IAAEC,WAAW,GAAG,UAAU;IAAEC,IAAI,GAAG,QAAQ;IAAEC;EAAc,CAAE,GAAGf,KAAK;EAElG,MAAM,CAACgB,WAAW,EAAEC,cAAc,CAAC,GAAGC,KAAK,CAACC,QAAQ,CAACC,qCAAuB,CAACC,mBAAmB,CAACL,WAAW,CAAC;EAC7G,MAAM,CAACM,cAAc,EAAEC,iBAAiB,CAAC,GAAGL,KAAK,CAACC,QAAQ,CAACC,qCAAuB,CAACC,mBAAmB,CAACL,WAAW,CAAC;EAEnH,MAAMQ,WAAW,GAAGnB,8BAAc,EAAkB;EACpD,MAAM;IAAEoB,UAAU;IAAEC,QAAQ;IAAEC,mBAAmB;IAAEC,aAAa;IAAEC;EAAY,CAAE,GAAGC,qCAAiB,CAClG9B,KAAK,EACL;IAAEgB,WAAW;IAAEM;EAAc,CAAE,EAC/BE,WAAW,CACZ;EAED,MAAMO,OAAO,GAAGC,+BAAa,CAACR,WAAW,EAAEb,GAAG,CAAC;EAE/C,MAAM;IAAEV,WAAW;IAAEQ;EAAe,CAAE,GAAGX,kBAAkB,CAACE,KAAK,CAAC;EAElE,OAAO;IACLY,UAAU;IACVC,WAAW;IACXC,IAAI;IACJb,WAAW;IACXwB,UAAU;IACVG,aAAa;IACbF,QAAQ;IACRL,mBAAmB,EAAE;MACnBJ,cAAc;MACdD,WAAW;MACXM,cAAc;MACdC;KACD;IAEDU,UAAU,EAAE;MACVC,IAAI,EAAE,KAAK;MACXnB,cAAc,EAAE,KAAK;MACrBoB,QAAQ,EAAE;KACX;IAEDD,IAAI,EAAEF,uCAAqB,CAAC,KAAK,EAAE;MACjCrB,GAAG,EAAEoB,OAAO;MACZK,IAAI,EAAE,OAAO;MACb,GAAG3B,eAAe;MAClB,GAAGT,KAAK;MACR,GAAG2B;KACJ,CAAC;IAEFZ,cAAc,EAAEiB,kCAAgB,CAACjB,cAAc,CAAC;IAChDoB,QAAQ,EAAEN;GACX;AACH,CAAC;AAjDYQ,wBAAgB","names":["focusMap","off","undefined","useCardInteractive","focusMode","props","interactive","some","prop","groupperAttrs","react_tabster_1","tabBehavior","interactiveFocusAttributes","tabIndex","focusAttributes","useCard_unstable","ref","appearance","orientation","size","floatingAction","referenceId","setReferenceId","React","useState","CardContext_1","selectableA11yProps","referenceLabel","setReferenceLabel","cardBaseRef","selectable","selected","selectableCardProps","selectFocused","checkboxSlot","useCardSelectable_1","cardRef","react_utilities_1","components","root","checkbox","role","exports"],"sourceRoot":"../src/","sources":["packages/react-components/react-card/src/components/Card/useCard.ts"],"sourcesContent":["import * as React from 'react';\nimport { getNativeElementProps, resolveShorthand, 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 '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>)[]).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', floatingAction } = 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 } = useCardSelectable(\n props,\n { referenceId, referenceLabel },\n cardBaseRef,\n );\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: resolveShorthand(floatingAction),\n checkbox: checkboxSlot,\n };\n};\n"]}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.useCardContextValue = void 0;
|
7
|
+
function useCardContextValue({
|
8
|
+
selectableA11yProps
|
9
|
+
}) {
|
10
|
+
return {
|
11
|
+
selectableA11yProps
|
12
|
+
};
|
13
|
+
}
|
14
|
+
exports.useCardContextValue = useCardContextValue;
|
15
|
+
//# sourceMappingURL=useCardContextValue.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"mappings":";;;;;;AAEA,SAAgBA,mBAAmB,CAAC;EAAEC;AAAmB,CAAa;EACpE,OAAO;IAAEA;EAAmB,CAAE;AAChC;AAFAC","names":["useCardContextValue","selectableA11yProps","exports"],"sourceRoot":"../src/","sources":["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"]}
|
@@ -0,0 +1,112 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.useCardSelectable = void 0;
|
7
|
+
const React = /*#__PURE__*/require("react");
|
8
|
+
const keyboard_keys_1 = /*#__PURE__*/require("@fluentui/keyboard-keys");
|
9
|
+
const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
|
10
|
+
const react_tabster_1 = /*#__PURE__*/require("@fluentui/react-tabster");
|
11
|
+
/**
|
12
|
+
* @internal
|
13
|
+
*
|
14
|
+
* Create the state related to selectable cards.
|
15
|
+
*
|
16
|
+
* This internal hook controls all the logic for selectable cards and is
|
17
|
+
* intended to be used alongside with useCard_unstable.
|
18
|
+
*
|
19
|
+
* @param props - props from this instance of Card
|
20
|
+
* @param a11yProps - accessibility props shared between elements of the card
|
21
|
+
* @param ref - reference to the root element of Card
|
22
|
+
*/
|
23
|
+
const useCardSelectable = (props, {
|
24
|
+
referenceLabel,
|
25
|
+
referenceId
|
26
|
+
}, cardRef) => {
|
27
|
+
const {
|
28
|
+
checkbox = {},
|
29
|
+
selected,
|
30
|
+
defaultSelected,
|
31
|
+
onSelectionChange,
|
32
|
+
floatingAction,
|
33
|
+
onClick,
|
34
|
+
onKeyDown
|
35
|
+
} = props;
|
36
|
+
const {
|
37
|
+
findAllFocusable
|
38
|
+
} = react_tabster_1.useFocusFinders();
|
39
|
+
const checkboxRef = React.useRef(null);
|
40
|
+
const isSelectable = [selected, defaultSelected, onSelectionChange].some(prop => typeof prop !== 'undefined');
|
41
|
+
const [isCardSelected, setIsCardSelected] = React.useState(false);
|
42
|
+
const [isSelectFocused, setIsSelectFocused] = React.useState(false);
|
43
|
+
const shouldRestrictTriggerAction = React.useCallback(event => {
|
44
|
+
if (!cardRef.current) {
|
45
|
+
return false;
|
46
|
+
}
|
47
|
+
const focusableElements = findAllFocusable(cardRef.current);
|
48
|
+
const target = event.target;
|
49
|
+
const isElementInFocusableGroup = focusableElements.some(element => element.contains(target));
|
50
|
+
const isCheckboxSlot = (checkboxRef === null || checkboxRef === void 0 ? void 0 : checkboxRef.current) === target;
|
51
|
+
return isElementInFocusableGroup && !isCheckboxSlot;
|
52
|
+
}, [cardRef, findAllFocusable]);
|
53
|
+
const onChangeHandler = React.useCallback(event => {
|
54
|
+
if (shouldRestrictTriggerAction(event)) {
|
55
|
+
return;
|
56
|
+
}
|
57
|
+
const newCheckedValue = !isCardSelected;
|
58
|
+
setIsCardSelected(newCheckedValue);
|
59
|
+
if (onSelectionChange) {
|
60
|
+
onSelectionChange(event, {
|
61
|
+
selected: newCheckedValue
|
62
|
+
});
|
63
|
+
}
|
64
|
+
}, [onSelectionChange, isCardSelected, shouldRestrictTriggerAction]);
|
65
|
+
const onKeyDownHandler = React.useCallback(event => {
|
66
|
+
if ([keyboard_keys_1.Enter, keyboard_keys_1.Space].includes(event.key)) {
|
67
|
+
event.preventDefault();
|
68
|
+
onChangeHandler(event);
|
69
|
+
}
|
70
|
+
}, [onChangeHandler]);
|
71
|
+
const checkboxSlot = React.useMemo(() => {
|
72
|
+
if (!isSelectable || !!floatingAction) {
|
73
|
+
return;
|
74
|
+
}
|
75
|
+
const selectableCheckboxProps = {};
|
76
|
+
if (referenceId) {
|
77
|
+
selectableCheckboxProps['aria-labelledby'] = referenceId;
|
78
|
+
} else if (referenceLabel) {
|
79
|
+
selectableCheckboxProps['aria-label'] = referenceLabel;
|
80
|
+
}
|
81
|
+
return react_utilities_1.resolveShorthand(checkbox, {
|
82
|
+
defaultProps: {
|
83
|
+
ref: checkboxRef,
|
84
|
+
type: 'checkbox',
|
85
|
+
checked: isCardSelected,
|
86
|
+
onChange: event => onChangeHandler(event),
|
87
|
+
onFocus: () => setIsSelectFocused(true),
|
88
|
+
onBlur: () => setIsSelectFocused(false),
|
89
|
+
...selectableCheckboxProps
|
90
|
+
}
|
91
|
+
});
|
92
|
+
}, [isSelectable, floatingAction, referenceId, referenceLabel, checkbox, isCardSelected, onChangeHandler]);
|
93
|
+
const selectableCardProps = React.useMemo(() => {
|
94
|
+
if (!isSelectable) {
|
95
|
+
return null;
|
96
|
+
}
|
97
|
+
return {
|
98
|
+
onClick: react_utilities_1.mergeCallbacks(onClick, onChangeHandler),
|
99
|
+
onKeyDown: react_utilities_1.mergeCallbacks(onKeyDown, onKeyDownHandler)
|
100
|
+
};
|
101
|
+
}, [isSelectable, onChangeHandler, onClick, onKeyDown, onKeyDownHandler]);
|
102
|
+
React.useEffect(() => setIsCardSelected(Boolean(defaultSelected !== null && defaultSelected !== void 0 ? defaultSelected : selected)), [defaultSelected, selected, setIsCardSelected]);
|
103
|
+
return {
|
104
|
+
selected: isCardSelected,
|
105
|
+
selectable: isSelectable,
|
106
|
+
selectFocused: isSelectFocused,
|
107
|
+
selectableCardProps,
|
108
|
+
checkboxSlot
|
109
|
+
};
|
110
|
+
};
|
111
|
+
exports.useCardSelectable = useCardSelectable;
|
112
|
+
//# sourceMappingURL=useCardSelectable.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"mappings":"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","names":["useCardSelectable","props","referenceLabel","referenceId","cardRef","checkbox","selected","defaultSelected","onSelectionChange","floatingAction","onClick","onKeyDown","findAllFocusable","react_tabster_1","checkboxRef","React","useRef","isSelectable","some","prop","isCardSelected","setIsCardSelected","useState","isSelectFocused","setIsSelectFocused","shouldRestrictTriggerAction","useCallback","event","current","focusableElements","target","isElementInFocusableGroup","element","contains","isCheckboxSlot","onChangeHandler","newCheckedValue","onKeyDownHandler","keyboard_keys_1","includes","key","preventDefault","checkboxSlot","useMemo","selectableCheckboxProps","react_utilities_1","defaultProps","ref","type","checked","onChange","onFocus","onBlur","selectableCardProps","useEffect","Boolean","selectable","selectFocused","exports"],"sourceRoot":"../src/","sources":["packages/react-components/react-card/src/components/Card/useCardSelectable.ts"],"sourcesContent":["import * as React from 'react';\nimport { Enter, Space } from '@fluentui/keyboard-keys';\nimport { mergeCallbacks, resolveShorthand } from '@fluentui/react-utilities';\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, Space].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 }, [isSelectable, floatingAction, referenceId, referenceLabel, checkbox, isCardSelected, onChangeHandler]);\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(() => setIsCardSelected(Boolean(defaultSelected ?? selected)), [\n defaultSelected,\n selected,\n setIsCardSelected,\n ]);\n\n return {\n selected: isCardSelected,\n selectable: isSelectable,\n selectFocused: isSelectFocused,\n selectableCardProps,\n checkboxSlot,\n };\n};\n"]}
|