{"_id":"@fluent-blocks/react","_rev":"49-f7e7fb305c17bc14f918281e54cf5c4a","name":"@fluent-blocks/react","dist-tags":{"latest":"9.2.0","next":"9.3.0-next.18"},"versions":{"9.0.0-alpha.1":{"name":"@fluent-blocks/react","version":"9.0.0-alpha.1","repository":"git@github.com:OfficeDev/fluent-blocks.git","authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","module":"esm/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"latest","@types/react":">=16.8.0 <18.0.0","@types/react-dom":">=16.8.0 <18.0.0","chart.js":"^2.9.4","react":">=16.8.0 <18.0.0","react-dom":">=16.8.0 <18.0.0"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"latest","@storybook/addon-actions":"latest","@storybook/addon-essentials":"latest","@storybook/addon-links":"latest","@storybook/addons":"latest","@storybook/react":"latest","@storybook/theming":"latest","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":">=16.8.0 <18.0.0","@types/react-dom":">=16.8.0 <18.0.0","@types/react-test-renderer":">=16.8.0 <18.0.0","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"^1.8.0","mocha":"latest","playwright-chromium":"latest","react":">=16.8.0 <18.0.0","react-dom":">=16.8.0 <18.0.0","react-test-renderer":">=16.8.0 <18.0.0","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.0.0-alpha.3","@fluent-blocks/schemas":"9.0.0-alpha.1","lodash":"latest","zod":"latest"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"_id":"@fluent-blocks/react@9.0.0-alpha.1","_integrity":"sha512-lV7zniAh4oe25L8JRNu0qDC0pgpKTHsaYXymCLOjXewyyax401M0NKA0cHc5joqIkdn7e2PcME9k5yFGwN078Q==","_resolved":"/Users/willshown/Projects/fluent-blocks/packages/react/fluent-blocks-react-9.0.0-alpha.1.tgz","_from":"file:fluent-blocks-react-9.0.0-alpha.1.tgz","_nodeVersion":"16.14.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-lV7zniAh4oe25L8JRNu0qDC0pgpKTHsaYXymCLOjXewyyax401M0NKA0cHc5joqIkdn7e2PcME9k5yFGwN078Q==","shasum":"500c72099ce73e5e84f78c24c77207c4975ea3a8","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.0.0-alpha.1.tgz","fileCount":155,"unpackedSize":505167,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiOkB2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrIFQ//Zd8xyKtHo2Epl//C6bMPSqXOjW5v/SvheZMyF3alRKvg6eul\r\nmEjrodLchCpI9HtJdRjeiniFV8BbrCnX7jCvKyyIM21HaPFenHGwqJLMGvdf\r\nSCBk2O8U4PPv+20TTKuQjlUAhSJuOpnsKgwFf3PVlP6vperHG2nJ/GtlReoa\r\nEr5BqB7KwhQPAwJcn3eWql3H6YBV0jOl+VL4YuPKqPm9QIHZ+7TKR9xC2kzb\r\naZtSeylkiZJbkgqjoaJcMD5TMjsuTjvYU68oqzyi0CDADwrQnerWbXkwHz3B\r\n7qxiHFVubkd7Rjkrgy0i4BmUJzOW69fnpF/Rvsdo1cGpACZ6oC4I8OIEVCVo\r\no9jNtE1ZjvaLwLA9Rqti0UMEFQtAItY/8wDNs+eM0CnuMLvMvKRvt0LT844T\r\nAwkIGdBbcpcnWVmQH7YCI35SNuI6W3BiFyITu+Oz9UIo+gknSKjNIasPKqDC\r\n47/f287Sh4Go+uSEv6Sth1pECfKu6WoCqgE/qEzzGdOABUf6LCX1WEthlaHP\r\nms1PF0xwJXgltpSXNTVylVzBsix8yBfCcqy3C8uATAzJPFHVCIX36WW461yo\r\nlIRpug0Vv6RF7Ov6YJHWKypcGnGX8QUehbwju1lpav1tIYqnmzuhzK319mAR\r\nhDdm8WlPG0f9EtL/8I6X21SkIULZQKbRkQs=\r\n=e0pO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFDxtOoYCeLn+hT509onvLlnO26Usk17bYumGotxDQN0AiEAv7auXd+xV/P9CX90HM2ClePzCbS8bAs6kfl8vB0YYn4="}]},"_npmUser":{"name":"thure","email":"npm@willshown.com"},"directories":{},"maintainers":[{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.0.0-alpha.1_1647984758400_0.059538062790564616"},"_hasShrinkwrap":false},"9.0.0-alpha.2":{"name":"@fluent-blocks/react","version":"9.0.0-alpha.2","repository":"git@github.com:OfficeDev/fluent-blocks.git","authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","module":"esm/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"latest","@types/react":">=16.8.0 <18.0.0","@types/react-dom":">=16.8.0 <18.0.0","chart.js":"^2.9.4","react":">=16.8.0 <18.0.0","react-dom":">=16.8.0 <18.0.0"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"latest","@storybook/addon-actions":"latest","@storybook/addon-essentials":"latest","@storybook/addon-links":"latest","@storybook/addons":"latest","@storybook/react":"latest","@storybook/theming":"latest","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":">=16.8.0 <18.0.0","@types/react-dom":">=16.8.0 <18.0.0","@types/react-test-renderer":">=16.8.0 <18.0.0","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":">=16.8.0 <18.0.0","react-dom":">=16.8.0 <18.0.0","react-test-renderer":">=16.8.0 <18.0.0","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.0.0-alpha.4","@fluent-blocks/schemas":"9.0.0-alpha.3","lodash":"latest"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@main/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\n1. Using TypeScript and an IDE that supports type inspections will make using this project much easier\n2. Since this project is not published to NPM yet, do the following:\n   1. Clone this repo, `cd` to `packages/react` within this repo\n   2. Run your package manager’s `link` command ([npm link](https://docs.npmjs.com/cli/v6/commands/npm-link), [yarn link](https://classic.yarnpkg.com/lang/en/docs/cli/link/), [pnpm link](https://pnpm.io/cli/link))\n   3. `cd` to your project\n   4. Use the same package manager you used earlier to add `@fluentui/react-blocks` to your project\n3. **Make sure to resolve any peer dependency warnings**; currently all peer dependencies are needed at the right versions for this package to work\n4. Use the `View` component to hand off all UI responsibility to this project, or use individual components as you need, whichever suits your needs best.\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","_id":"@fluent-blocks/react@9.0.0-alpha.2","_integrity":"sha512-LtNja6RknfwxY5sNdugH9H+iWo3vSPBP8+kFaXGiltYIIt8PJYQsd/g8SRGeqc72FxE3Z4ENyhuhCZ74qRsb1Q==","_resolved":"/Users/willshown/Projects/fluent-blocks/packages/react/fluent-blocks-react-9.0.0-alpha.2.tgz","_from":"file:fluent-blocks-react-9.0.0-alpha.2.tgz","_nodeVersion":"16.14.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-LtNja6RknfwxY5sNdugH9H+iWo3vSPBP8+kFaXGiltYIIt8PJYQsd/g8SRGeqc72FxE3Z4ENyhuhCZ74qRsb1Q==","shasum":"404ba20e936ed26fcbe494459cccc520d5265377","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.0.0-alpha.2.tgz","fileCount":299,"unpackedSize":543494,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiO6M/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoqiA//U3x03uDWIs+68LzqvWiFJ/o07WMm8CxQUcxocz0OhDv1QiD4\r\nOVbAD///cP4cAfsH5P9Un/EXmcs8+cbAMYPJnJiEG0wySfqXSnRK9HwI9apC\r\nZ0Wr+DJaLYxXW1S2ftQU6AsG28w+gERv5uwKTG/jFjNb3jH5+OicuIM/7/AV\r\nySq0rp5E9Naa8A6oLgElFn+ZJkp+JcjC5TwFXwJliR/SBuCM+qbFX8v/S+tf\r\n6yvJ+TMvXP8YDhbF6CqPuo+nV6bo53Kcfar5+qjWGD0lJvhXsh82R4agbr4h\r\n8px83PK45MvyJgyfp7+Dnob1kQXNbC+yjONoyeK6Wxvs1sFMc5afHy8/qvTs\r\nbB3Y7mxZPo7d/ohKs3mPGE82fvJ2MhOSo5hhQv1dH1ANOCd0HRPfwgAqR51B\r\nPwgbq7HHqKOvakZ6iMT7EceUM36kebLuudXBDkjfRzBjsiokCbwqLxOvcj8V\r\nA4n9zCJHH9sB7MXOXXn/OsiLFf5tUKiQpfn2EDDFH0Png9Ig50nbeJlSy+Vl\r\njhsczs0GpIE5P+hpoe7M7swv0QIVuhQawCP63wJ1YCLhlSu4R2JYqQry41XI\r\nZ8YnSKELmyX9YdefTyPMJ2y0f7KUpogIk3yGhh0mNmlvgwrdYJw0w1BEO7+u\r\nN+s2vu2m6WlpRBRsdcN1X1iNpyC40ODMg+4=\r\n=1M4O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICJtr6nrjEUEkygQM385Hrn5dnljpB4F86eUu7zK8p/gAiEAghuL8BmX5N67QOAGrR1hWOyn4Efg+tXUKNDIF1+cHyM="}]},"_npmUser":{"name":"thure","email":"npm@willshown.com"},"directories":{},"maintainers":[{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.0.0-alpha.2_1648075583153_0.7428121437757402"},"_hasShrinkwrap":false},"9.0.0-alpha.3":{"name":"@fluent-blocks/react","version":"9.0.0-alpha.3","repository":"git@github.com:OfficeDev/fluent-blocks.git","authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","module":"esm/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"latest","@types/react":">=16.8.0 <18.0.0","@types/react-dom":">=16.8.0 <18.0.0","chart.js":"^2.9.4","react":">=17.0.0 <19.0.0","react-dom":">=17.0.0 <19.0.0"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"latest","@storybook/addon-actions":"latest","@storybook/addon-essentials":"latest","@storybook/addon-links":"latest","@storybook/addons":"latest","@storybook/react":"latest","@storybook/theming":"latest","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":">=16.8.0 <18.0.0","@types/react-dom":">=16.8.0 <18.0.0","@types/react-test-renderer":">=16.8.0 <18.0.0","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":">=17.0.0 <19.0.0","react-dom":">=17.0.0 <19.0.0","react-test-renderer":">=16.8.0 <18.0.0","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.0.0-alpha.4","@fluent-blocks/schemas":"9.0.0-alpha.3","lodash":"latest"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@main/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\n1. Using TypeScript and an IDE that supports type inspections will make using this project much easier\n2. Since this project is not published to NPM yet, do the following:\n   1. Clone this repo, `cd` to `packages/react` within this repo\n   2. Run your package manager’s `link` command ([npm link](https://docs.npmjs.com/cli/v6/commands/npm-link), [yarn link](https://classic.yarnpkg.com/lang/en/docs/cli/link/), [pnpm link](https://pnpm.io/cli/link))\n   3. `cd` to your project\n   4. Use the same package manager you used earlier to add `@fluentui/react-blocks` to your project\n3. **Make sure to resolve any peer dependency warnings**; currently all peer dependencies are needed at the right versions for this package to work\n4. Use the `View` component to hand off all UI responsibility to this project, or use individual components as you need, whichever suits your needs best.\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","_id":"@fluent-blocks/react@9.0.0-alpha.3","_integrity":"sha512-6ZcSPGN3nTHNFAb32juq1FdREc559DuubEEwqj6WVROBMIVa8/ckn93hZcNHK88RcgbabEGkBMJ7OCgObaJsOA==","_resolved":"/Users/willshown/Projects/fluent-blocks/packages/react/fluent-blocks-react-9.0.0-alpha.3.tgz","_from":"file:fluent-blocks-react-9.0.0-alpha.3.tgz","_nodeVersion":"16.14.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-6ZcSPGN3nTHNFAb32juq1FdREc559DuubEEwqj6WVROBMIVa8/ckn93hZcNHK88RcgbabEGkBMJ7OCgObaJsOA==","shasum":"b4bba7b55ce570758ed87477813dfd85d84aaf98","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.0.0-alpha.3.tgz","fileCount":299,"unpackedSize":572483,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiO7TkACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo27A//ZfCWuTaIoVZT+SXZi0cIo9Qlef0FoqrfX+mTUZZJmadNZh97\r\nDCAKbDnpjnqKfF+q9L0okyjBkOpARsTwc3ORmox4YcPZuvJ2Cm7jH9x/huk7\r\nLDWcRFvFACqnrOFUk7+16wLUvEikXa1I0/Su87b8xd3PQxAAtQ/KPxxW31/N\r\nN8GTtUfW4fwWhAULh96dbSM08ouLTDSk/ln7E3aFa9EE0XcWjMCyhhNXir+u\r\nyaewm0rHa8tw2oB7IeCX1BXx3toeexcEQsfWlfhgQLSX3KG/Wng1qWgP3tgw\r\n78K04HXLxn1UjNQ16KMD8v4DnZEr9hnvLc65F2JEIWLheFV0tYXL93Fbyobq\r\npCDdk/KQZ6pPxot++bWngo9Ygnn/V2b+jGIMGJUVG7pv0BTMjwVhUKKrun1u\r\nsejPNaIsnM37eup8ET1HslS5ZHiL81a2fJrioImFBdndvMsOhisE+yQeaRqH\r\nnQiQI8cPMX5axEW5etX7gAFBF+kfhTP+bCIYWillRDgYg6NKq3rlObQ7fSo+\r\n1CwPnOFbgsK4bgp97jXYY4fqIehiIPriExWyX4zZSdZz3kc1tX1BltDEI8y9\r\npFr1vgyqgRv2WGheIuR/r054uje80c6EjbBzclcEmFALtxO1TAqiptRULNBw\r\n8j2vbed3ab9sKOCnOxuycEYlV5/nFlJI7Uk=\r\n=gTng\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDItvKoyNaZXD25AujQzVoDyX3Tw7X9IFf/EW4+vEc4EwIhAPt/ceAHgkZYCPAlULesV+W1LmgMyutZLqaYbohbAuDj"}]},"_npmUser":{"name":"thure","email":"npm@willshown.com"},"directories":{},"maintainers":[{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.0.0-alpha.3_1648080100372_0.9820039838204386"},"_hasShrinkwrap":false},"9.0.0-alpha.4":{"name":"@fluent-blocks/react","version":"9.0.0-alpha.4","repository":"git@github.com:OfficeDev/fluent-blocks.git","authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","module":"esm/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"latest","@types/react":">=17.0.0 <19.0.0","@types/react-dom":">=17.0.0 <19.0.0","chart.js":"^2.9.4","react":">=17.0.0 <19.0.0","react-dom":">=17.0.0 <19.0.0"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"latest","@storybook/addon-actions":"latest","@storybook/addon-essentials":"latest","@storybook/addon-links":"latest","@storybook/addons":"latest","@storybook/react":"latest","@storybook/theming":"latest","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":">=17.0.0 <19.0.0","@types/react-dom":">=17.0.0 <19.0.0","@types/react-test-renderer":">=17.0.0 <19.0.0","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":">=17.0.0 <19.0.0","react-dom":">=17.0.0 <19.0.0","react-test-renderer":">=17.0.0 <19.0.0","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.0.0-alpha.4","@fluent-blocks/schemas":"9.0.0-alpha.3","lodash":"latest"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@main/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\n1. Using TypeScript and an IDE that supports type inspections will make using this project much easier\n2. Since this project is not published to NPM yet, do the following:\n   1. Clone this repo, `cd` to `packages/react` within this repo\n   2. Run your package manager’s `link` command ([npm link](https://docs.npmjs.com/cli/v6/commands/npm-link), [yarn link](https://classic.yarnpkg.com/lang/en/docs/cli/link/), [pnpm link](https://pnpm.io/cli/link))\n   3. `cd` to your project\n   4. Use the same package manager you used earlier to add `@fluentui/react-blocks` to your project\n3. **Make sure to resolve any peer dependency warnings**; currently all peer dependencies are needed at the right versions for this package to work\n4. Use the `View` component to hand off all UI responsibility to this project, or use individual components as you need, whichever suits your needs best.\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","_id":"@fluent-blocks/react@9.0.0-alpha.4","_integrity":"sha512-n/Mqh3cd34xVKXH8uWGbMu4bRyfXP6k7lVwIbEtvK4eiGsE4Ye2m5jxE/XHZz4f59kznPSsG2hdLjRwFmHhgfQ==","_resolved":"/Users/willshown/Projects/fluent-blocks/packages/react/fluent-blocks-react-9.0.0-alpha.4.tgz","_from":"file:fluent-blocks-react-9.0.0-alpha.4.tgz","_nodeVersion":"16.14.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-n/Mqh3cd34xVKXH8uWGbMu4bRyfXP6k7lVwIbEtvK4eiGsE4Ye2m5jxE/XHZz4f59kznPSsG2hdLjRwFmHhgfQ==","shasum":"fa76a794ea835df8eaf2d1529a51507aa62680b5","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.0.0-alpha.4.tgz","fileCount":299,"unpackedSize":572879,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiO7h+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqyOQ/+PI/qoxbC6Zyv6wSlP4oWktV7/7JuyCv5SHnEagazhco9ia/A\r\nt/qeJNiEAles8jckqXfaUcIj5EtBuYKiTCC7Z8glInbpb2+eY4WaifAHbFSt\r\nLIhAJgHsL8zcjxRyn2TKQL+jxMENi8A8I09CL4g3luzgnOt58LGbsDLZK5Oi\r\nBSDPRtMVThh4Axnotq7bgn32O4/btar8eaE71+SmNuxQtxeUW5r7HgV2pETa\r\neGyoON2eEhi4ygYBZFGstcU4HBA3+cFYQrJMr/jhe8Nxu1X1r7yOi3/DP0/9\r\nrA815UD32JmHE6UlssBD+yAuFuqGSNeZubH9hKgCz337hDVmEsNb5/RqBNIe\r\nESVeEZZuAtPIrlPwPCJpBr7EX/kRQN3CY6VmSfnuH4DjdtQdUTAirTDHxqzW\r\nDvarKOhkFA51C/JhqZXfBTFC+kBYwE/DWNiHBaMvUxw26lXESFq79/JnuqYR\r\nreIcN4Cn7/nUz0IztSM/XjhqzFS5Lg9OcvZeu7Wz5ZyXFWeahwVidaRGMpWy\r\nMu4CV5c/eOV1TLeTgAabVHzdZ/c6U5xELGmOjNwaM8tGUz8xcuQasrBvwUKb\r\n58jY81azWjEWQ2NkeINb7v/oTijhyJMsFxB8DVbECaMLaffPzYyok6FyJXXl\r\n9PCE05IfurUzO3WN5VeH/bIqfbr5YZWLykA=\r\n=UhV2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICpeyHHTov7Nz1kM3BDT6t+pcBYO7ULLE648R3D9o+2BAiBbCMz/l5xwBoSV6/A8ZpoQape2Henh1IPmYX7rwlKGAA=="}]},"_npmUser":{"name":"thure","email":"npm@willshown.com"},"directories":{},"maintainers":[{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.0.0-alpha.4_1648081021965_0.9559548851790498"},"_hasShrinkwrap":false},"9.0.0-alpha.5":{"name":"@fluent-blocks/react","version":"9.0.0-alpha.5","repository":"git@github.com:OfficeDev/fluent-blocks.git","authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"latest","@types/react":">=17.0.0 <19.0.0","@types/react-dom":">=17.0.0 <19.0.0","chart.js":"^2.9.4","react":">=17.0.0 <19.0.0","react-dom":">=17.0.0 <19.0.0"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"latest","@storybook/addon-actions":"latest","@storybook/addon-essentials":"latest","@storybook/addon-links":"latest","@storybook/addons":"latest","@storybook/react":"latest","@storybook/theming":"latest","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":">=17.0.0 <19.0.0","@types/react-dom":">=17.0.0 <19.0.0","@types/react-test-renderer":">=17.0.0 <19.0.0","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":">=17.0.0 <19.0.0","react-dom":">=17.0.0 <19.0.0","react-test-renderer":">=17.0.0 <19.0.0","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.0.0-alpha.4","@fluent-blocks/schemas":"9.0.0-alpha.3","lodash":"latest"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@main/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\n1. Using TypeScript and an IDE that supports type inspections will make using this project much easier\n2. Install `@fluent-blocks/react@alpha` using your package manager\n4. **Make sure to resolve any peer dependency warnings**; currently all peer dependencies are needed at the right versions for this package to work\n5. Use the `View` component to hand off all UI responsibility to this project, or use individual components as you need, whichever suits your needs best.\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","_id":"@fluent-blocks/react@9.0.0-alpha.5","_integrity":"sha512-0p2//PmOrgpyaW1brwUXXwvmYxfxtfd9NbUq/OFtoBOe6RUax8TFsKJcNtDetUotzgti1l//M8yunuAIyGpP/Q==","_resolved":"/Users/willshown/Projects/fluent-blocks/packages/react/fluent-blocks-react-9.0.0-alpha.5.tgz","_from":"file:fluent-blocks-react-9.0.0-alpha.5.tgz","_nodeVersion":"16.14.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-0p2//PmOrgpyaW1brwUXXwvmYxfxtfd9NbUq/OFtoBOe6RUax8TFsKJcNtDetUotzgti1l//M8yunuAIyGpP/Q==","shasum":"7f76a1a7f6b85ec31efee34b807b969c7f298c3a","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.0.0-alpha.5.tgz","fileCount":300,"unpackedSize":572275,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiO8p8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqosw//bjeV2UG09B91ODbOEnCXd2XGVrCHXSt+CZn+Vk+uNqdOOZoD\r\n4NlNVQZE6kajMynS8/O+emDSOQq6fcr2SQ5tAx8d3B2Ya/tyX7RZvrVH3mIZ\r\nxk5hDGNjQADcw16rWiOCYOmXYVacLCUXfkAPmI3LhlpMPOUar02f2dLY9Hc5\r\nIWL/ViBsMCb5hF3g6tToG555NVtpFJWbbF17yC2O2RegfvvuGMTT5vyT8abS\r\nIFt7psNM1atDpTNyo7oo3J8AylQZZihQje/A1M4zzlEe3S8NkptSJ1SRYCLF\r\nUpJT1vYTLWgewoFAA2Ro8aQFEPQL1e0UKVVqK4VqDPLDuak5I8RAsUoW187s\r\ng+39L8tck/R5VgCcSdkXTMRpAUN8VEd+UhG1e8ZJc4vuwQULTpAe+4cV+AmD\r\nR80nU0d4ayLfQw6jvHNsOPF6q9u/5ux6SKHIRmGVD0/558Pb3lFSx2JigxTm\r\nWqLUH02vWPmfYPfIyOshkwT0EvjuiAjmZDWZnENgVt4vmVf2htfGcejYRXwU\r\nP1yEqFoJqyHR1cK0xvL3KQqvyxHukbb0qkQ0gi5jwSPrw3mVjIkVi0YxDNmj\r\ncDeQXKLx7Vrgbet3ugV0xxez1SrSaH5vPr8JNaQRRAROmXdgL99vPa0mc/cV\r\n7KpzT6gCLLnUXMFhen7RXWZwsNRV2Awimwg=\r\n=tA6A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEPvqJz3LzvDzOZDCH4O9dAKepikr0GXBCyawY9ju7ngIhANOVgv9ea2IY8TPVnovO+9bKMJfTbsbYGkXL9vVGaRfk"}]},"_npmUser":{"name":"thure","email":"npm@willshown.com"},"directories":{},"maintainers":[{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.0.0-alpha.5_1648085628712_0.40248688373608865"},"_hasShrinkwrap":false},"9.0.0-alpha.6":{"name":"@fluent-blocks/react","version":"9.0.0-alpha.6","repository":"git@github.com:OfficeDev/fluent-blocks.git","authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"latest","@types/react":">=17.0.0 <19.0.0","@types/react-dom":">=17.0.0 <19.0.0","chart.js":"^2.9.4","react":">=17.0.0 <19.0.0","react-dom":">=17.0.0 <19.0.0"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"latest","@storybook/addon-actions":"latest","@storybook/addon-essentials":"latest","@storybook/addon-links":"latest","@storybook/addons":"latest","@storybook/react":"latest","@storybook/theming":"latest","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":">=17.0.0 <19.0.0","@types/react-dom":">=17.0.0 <19.0.0","@types/react-test-renderer":">=17.0.0 <19.0.0","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":">=17.0.0 <19.0.0","react-dom":">=17.0.0 <19.0.0","react-test-renderer":">=17.0.0 <19.0.0","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.0.0-alpha.4","@fluent-blocks/schemas":"9.0.0-alpha.3","lodash":"latest"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@main/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17`, and `@fluentui/react-components@latest` if they’re not in your project already\n2. Add `chart.js@^2.9.4` if you want to use charts from this package\n3. Depending on your package manager, you may need to add `@fluent-blocks/basic-icons` to use icons\n4. Finally, install this package, `@fluent-blocks/react@alpha`, using your package manager\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","_id":"@fluent-blocks/react@9.0.0-alpha.6","_integrity":"sha512-vW6UTZc6MfT7EmYJDhg6PEvWenqBAm8Y/Gn/GWKWxoy+um6mAaHls//BcK85Tvnp/w79NuMaRkA2Eyc09Tpudw==","_resolved":"/Users/willshown/Projects/fluent-blocks/packages/react/fluent-blocks-react-9.0.0-alpha.6.tgz","_from":"file:fluent-blocks-react-9.0.0-alpha.6.tgz","_nodeVersion":"16.14.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-vW6UTZc6MfT7EmYJDhg6PEvWenqBAm8Y/Gn/GWKWxoy+um6mAaHls//BcK85Tvnp/w79NuMaRkA2Eyc09Tpudw==","shasum":"2af1ea45ad54a029fed37255a92ad66dbcc91b39","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.0.0-alpha.6.tgz","fileCount":300,"unpackedSize":576014,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiO/7/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqb/w/9G8nGt1MgpbilXfCWaMovlZR+lOtGNXv48Wb3T3GuDZqYSQFi\r\n2VIsPdYx10jVrMrBwbVeoN0pAr+Uc60X6o3UuxuKxccWiswQGKkQHV/MOqMb\r\nbqdhOw3F3IwVLFTP10EvFPkVJjiM0tN6jdKVcbVimx6NSZWOdmqrvygdHGAw\r\nOVq/IexpVxxUJZClOPufQ7yGCK/kXgnfSaKfT6Kk6RBf8jLejlbZuR7okBgD\r\nATWChTukGzfRiP+6XCTeq6bWspzBtk2+CDiqpZv24KF8BhVS589/5fArKjOk\r\nikLzp3t0q4vuKP2vgH+TWHVslsJGu1zA8Lr0DLVdKHGNflSqlGl9Uds4wbeJ\r\nPvPs7JMIEm7cf5QCkQ2/6OpDGvi9RWs44UFOx3NfZl7UjOjP7MvQ6NYDKRhH\r\n5OTbi76lUZzj76PZx4VA5wWiQXStgs9vStFSiFwAesnHjoQv50skrGqNHw/k\r\nbV+840RWBGv5TD78TzaVxmFJ1fekhdF0Crw0pYVvOe+XDzsUXm4cgt4tR8Fp\r\nZGwnxMqHhLKvUbnbfkrkEyuYy0rC4GPX5/TXZsvK5IBW/tFeah9wvjXOh4QR\r\nVN35ZcfDh7J2c9xfxH9N94Rv1uG0SDsCR5MXzR38wpiXDSsaGImvXv3XL/99\r\nFtdurPpW99JxbjTFg+D0o5WTdkJqhXboqwg=\r\n=hgOO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPi4LQUiXCU+C3q6yPkFuOAk2ebVQtHYtrK0VLCbyi/QIhAKuaHrqaRhBhjpNWyNXQ7NA40DKS6xxI3Y4ZzhQ169QE"}]},"_npmUser":{"name":"thure","email":"npm@willshown.com"},"directories":{},"maintainers":[{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.0.0-alpha.6_1648099070771_0.5373695384280517"},"_hasShrinkwrap":false},"9.0.0-alpha.7":{"name":"@fluent-blocks/react","version":"9.0.0-alpha.7","repository":"git@github.com:OfficeDev/fluent-blocks.git","authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"latest","@types/react":">=17.0.0 <19.0.0","@types/react-dom":">=17.0.0 <19.0.0","chart.js":"^2.9.4","react":">=17.0.0 <19.0.0","react-dom":">=17.0.0 <19.0.0"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"latest","@storybook/addon-actions":"latest","@storybook/addon-essentials":"latest","@storybook/addon-links":"latest","@storybook/addons":"latest","@storybook/react":"latest","@storybook/theming":"latest","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":">=17.0.0 <19.0.0","@types/react-dom":">=17.0.0 <19.0.0","@types/react-test-renderer":">=17.0.0 <19.0.0","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":">=17.0.0 <19.0.0","react-dom":">=17.0.0 <19.0.0","react-test-renderer":">=17.0.0 <19.0.0","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.0.0-alpha.4","@fluent-blocks/schemas":"9.0.0-alpha.3","lodash":"latest"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@main/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17`, and `@fluentui/react-components@latest` if they’re not in your project already\n2. Add `chart.js@^2.9.4` if you want to use charts from this package\n3. Depending on your package manager, you may need to add `@fluent-blocks/basic-icons` to use icons\n4. Finally, install this package, `@fluent-blocks/react@alpha`, using your package manager\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","_id":"@fluent-blocks/react@9.0.0-alpha.7","_integrity":"sha512-mfn8kJ5O67WAySw4VIWj4Uslds6xHfzCDwFcbJ6WmLcWXw2bLqGSBiqW7Kh/2cZtAAWsOolh8Z29JwtzpiHEHg==","_resolved":"/Users/willshown/Projects/fluent-blocks/packages/react/fluent-blocks-react-9.0.0-alpha.7.tgz","_from":"file:fluent-blocks-react-9.0.0-alpha.7.tgz","_nodeVersion":"16.14.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-mfn8kJ5O67WAySw4VIWj4Uslds6xHfzCDwFcbJ6WmLcWXw2bLqGSBiqW7Kh/2cZtAAWsOolh8Z29JwtzpiHEHg==","shasum":"1c0c08663b3f1a0719d05bb8c97ad21cd5690cd0","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.0.0-alpha.7.tgz","fileCount":300,"unpackedSize":576706,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiPBgzACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrYzg//TRx2Jf0ifIwlgGYlKan+7nuueNbcINrfGU4Kpp2ZrSogPNQk\r\nb0+cP1M5rTNr5vkt9w3qlY0HlqqC09DXsi/+42ZdUyVtbCZYTKPfvKv1IK9k\r\nB/QK+MHCExaZts43xlmfampV/JDJk8slq+jLKH28RGrUOZkoFjppcJumoNrh\r\nBMiDmWmrWGGe3Jqm850JSyN7kPaLOjKWqrt1ERK4Noo/kVxzCYGwJpGsDbjR\r\nI17YpETQ4JWUr04QXnBozlorhNdDHOKR9c67RPGBt8c9F8k60IolaBjRq1kF\r\nJnDs+C+7RvVLg2ceCbbEaLYB/zIfKfJZt5mBCtSCZXp4NvnF1AtOOzKfHJIk\r\nrJY7gqZqNGhz7AMuf4IVv8xEN82T2h92ukgr0+5Jdt20Fm5zf8jJ4bQpmDRu\r\n7M6wGAtL411n6+GjF4tMJiMKlDkK2/HdX2idp0s9+CENVe/vj3nWK65+ppvI\r\nXZu5wfla0nJlmLCoHnRXl4Fp+VzPFXK1fXhE4MBazjGKj7FHXddbMvIKyoP2\r\nJUbevChRnEHb1sVOLiF6D8kkEtIcsMNBlpQPv4gOR4msTscs9irQcagmnB62\r\nhCF9AKN0f9dssuNgPyNxWcBN7QgmSw6UP6apRUYIGeKtYD9oEdPYjoRPKM6+\r\n3t/dRaAIwV32omI8LzqNRZtFokMQy1YC65Q=\r\n=mCkK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE699dLsAYxOvYxQ4jzvgrYfO8cTNqTlXYC2lYTC9XOWAiEA7ZPsnisXkfaGYI9923he/8Lk2f7HAuGCpU0neWIXGZs="}]},"_npmUser":{"name":"thure","email":"npm@willshown.com"},"directories":{},"maintainers":[{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.0.0-alpha.7_1648105522842_0.42923811129205447"},"_hasShrinkwrap":false},"9.0.0":{"name":"@fluent-blocks/react","version":"9.0.0","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"latest","@types/react":">=16.13.1 <19","@types/react-dom":">=16.13.1 <19","chart.js":"^2.9.4","react":">=16.13.1 <19","react-dom":">=16.13.1 <19"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"latest","@storybook/addon-actions":"next","@storybook/addon-essentials":"next","@storybook/addon-links":"next","@storybook/addons":"next","@storybook/react":"next","@storybook/theming":"next","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"github:thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.0.0","@fluent-blocks/schemas":"9.0.0","@fluentui/react-tabster":"latest","lodash":"latest"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"node ./scripts/prebuildsb.js && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.0.0.tgz","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@main/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.0.0","_nodeVersion":"14.19.1","_npmVersion":"6.14.16","dist":{"integrity":"sha512-I9viHWYT54aVJIH9tP8WBfZc4WXDIxs6+PLhKmCBpDXZsPTJUB71KKaNoaOF5+1UC3vJJJcP37aHTQfH9mHuAg==","shasum":"8a3eb11000e9160eb7003d24ccac5504266809c4","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.0.0.tgz","fileCount":336,"unpackedSize":658905,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBb0eKbWd4nmCmk+drQTI1jtlbCo0xlmHramCYllgY5AAiEA6A38VVYKEJdKIdNQhk8HV9DXTve8M11kJ7KoH/F43/c="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiYHHvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpkARAAh8UuZYrhizI/2dj2sGyPiJYE42FepOToW6AvvzAp351EDWE5\r\nGzQV50bwhzWwgcd0xrOgQ4rPSuZhh/gEegcqQZYspEsjd2ESm0covtXKnf7a\r\nnAVkwV95Nno9l2VTmeAaQgSgVFZc6Eol+1ML44a6MXmEfAuVbMRRkvxChk2N\r\nHNlY/HEmiHJ5USXBoSfwv4kNPuOsJ4x5MnfFhGTYhhkXrVKjVz5Ai6AzWCe+\r\n25pdT6Z55Zt+Bai1sQNtUzcJ2eq8iE8Og7xlUf7zjPt8kAojeQCxhkqr/QrU\r\nJgqv1w/TSbJ+pBmJiLDkGFXEsZEMm4/YrYJsTDvl7cND2QtJIHyUSrUn2/jQ\r\ncPl9ql7I/yh+ISThlhj0bOlrd0JLchzaBYK/yDSnVwdoNqTdy24ym1HlUC/m\r\n+nifou/arVZQShlTUjkKbaHOvMABak7eKymRXQOR3OltIQdGF4wxlaup7Rfe\r\ns6n9oKLHYSrAzOM9Hm0gr8Zvtke1Ljlmnfzi2pFm9GSFeoefJL4sWkPMtL2+\r\nRGpoXmoriroxVKdIw3hAJFphbaOgNjMIFxeqWn2NZMSldBDWXvV5UyF2A8Ou\r\nTkhFZZ699XJC2fhqBsGAqMV3xc+asJS4FGkKPFR232b5idp3myzlIQGVerV2\r\nYIB9OxoYBHf5iby20Cx05nFQUCcOmxPcARs=\r\n=vVUT\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.0.0_1650487790825_0.9956309373197632"},"_hasShrinkwrap":false},"9.1.0-next.1":{"name":"@fluent-blocks/react","version":"9.1.0-next.1","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"latest","@types/react":">=16.13.1 <19","@types/react-dom":">=16.13.1 <19","chart.js":"^2.9.4","react":">=16.13.1 <19","react-dom":">=16.13.1 <19"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"latest","@storybook/addon-actions":"next","@storybook/addon-essentials":"next","@storybook/addon-links":"next","@storybook/addons":"next","@storybook/react":"next","@storybook/theming":"next","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"github:thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.0-next.1","@fluent-blocks/schemas":"9.1.0-next.1","@fluentui/react-tabster":"latest","lodash":"latest"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"node ./scripts/prebuildsb.js && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@main/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17`, and `@fluentui/react-components@latest` if they’re not in your project already\n2. Add `chart.js@^2.9.4` if you want to use charts from this package\n3. Depending on your package manager, you may need to add `@fluent-blocks/basic-icons` to use icons\n4. Finally, install this package, `@fluent-blocks/react@alpha`, using your package manager\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.1.0-next.1.tgz","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@main/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.1.0-next.1","_nodeVersion":"14.19.1","_npmVersion":"6.14.16","dist":{"integrity":"sha512-/frrORYJpWFUMnOwagwJN3Z0Kf03QzzM9bCyU3kuwF1o6z2msT0N955nzvEOJDSpPe5KDplhERUve3KGJGVXYQ==","shasum":"9b3347ea5fc4fe9660a77750d793181255627fec","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.1.0-next.1.tgz","fileCount":336,"unpackedSize":658926,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQZGu2abVPQRGBAd36fXpe8LdRuzZnIP1yYveI53sReQIgcKuQkjyXRXxz6JEOfInuClRNPglQvCNhx0vS9yoorsw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiYH7PACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrF0w//Y/QPtPTW4t0cTSdLanVz8d2mNg/2v8J6/r+RfMQQe+m6P8Wo\r\nq4iSOWkTRlyUM3YpeB0KAywV9hKFc4hsakMXLcgQsobglnxiskOd9GfqbDIA\r\n63quAkFxmjeApxCqk0JLh8VkcTMJOwEAJMKHKXhkz+puDFWs44vqump00IEM\r\nOzrLf9CIjdLPfotjFfOUtjcI/Y3E7oovRGlF7exbnG5W870v7IfwYfAyLNeS\r\nx9k/+qd2onPGmhaMyGVT39Df76pX+3KLKGFccTETLSK4SDsi1ik3vwe7H4Ax\r\nqIAbspJj9oKX51qE54Kub7kyVJl7t2olDx4j2EogbO/CrZkMm9+RlkiUZR40\r\nW3wzXe4wXuUibHA1V53nhgsfLlV60XxSpYZkhFLr4Z7bdJWErlcUMDIEZQ/m\r\nh84oiEvT+IS9TmpAPAYnSWUTgNqte1ynmoM+kFWKrpL7brg+D0BMehqS4oLc\r\nITlw2WoUEKQOXhiHfAe1cANUSYuXUZETFknyh3KYV/upOwOL/Pj9jRBMcgf9\r\nITObA1fFAiPwvVvHra6AEl5MJPOuYOEPJrHXc+EAvGiNbCNdYM9oGMWI+LB6\r\nIWh1lFgn8vYyjYXBxCc2e7/jVmUrDsdQQdvwQFg3xM0xBYVpUxQkfkkYw87q\r\nil/oR3cvSCWKQTVEgPjz1pRBRCxX0Mjz4XQ=\r\n=D677\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.1.0-next.1_1650491086893_0.13295966380147473"},"_hasShrinkwrap":false},"9.1.0-next.2":{"name":"@fluent-blocks/react","version":"9.1.0-next.2","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"latest","@types/react":">=16.13.1 <19","@types/react-dom":">=16.13.1 <19","chart.js":"^2.9.4","react":">=16.13.1 <19","react-dom":">=16.13.1 <19"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"latest","@storybook/addon-actions":"next","@storybook/addon-essentials":"next","@storybook/addon-links":"next","@storybook/addons":"next","@storybook/react":"next","@storybook/theming":"next","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"github:thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.0-next.2","@fluent-blocks/schemas":"9.1.0-next.2","@fluentui/react-tabster":"latest","lodash":"latest"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"node ./scripts/prebuildsb.js && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@main/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17`, and `@fluentui/react-components@latest` if they’re not in your project already\n2. Add `chart.js@^2.9.4` if you want to use charts from this package\n3. Depending on your package manager, you may need to add `@fluent-blocks/basic-icons` to use icons\n4. Finally, install this package, `@fluent-blocks/react@alpha`, using your package manager\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.1.0-next.2.tgz","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@main/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.1.0-next.2","_nodeVersion":"14.19.1","_npmVersion":"6.14.16","dist":{"integrity":"sha512-hXBTKZKDARA0o+cMFe3IgqtU6NsO2dRho6QQ+WhekyiRfTjYxFVxK18cBEBaOQVKBMR4l0XsANHnVoNGl7genQ==","shasum":"5e7299a8a9ba5779a8083a61cd5f6033ddad8b65","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.1.0-next.2.tgz","fileCount":336,"unpackedSize":662023,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICy+bNbP4NrGlefOKdkwoyDb7QqmDIIeel9MsAs24q1kAiAZS/SqyvpvpAD4XulGJNSj6suDe1b/HPl/ZwJuEcwzGw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiZ5VeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqFzhAAj0VkgIUK3k3f5MCN+Asvl6BUS+frNzW1f5wi8a3cltg8bpN0\r\nxM5KDPWMdQSsNs8qptNhe7VMnmnssECLIv6pOFY8g08qWxByghHsxsDj179C\r\nWhw2cnIlvAzFAyWah+fWyjvS4xfdnvQLDI5UufPEfkgBvTXE48g6+lPiZx6H\r\nDmYVode+Zb0Xz0m0ecZ3SrT0DefzJAZa69xSq2bIPOAHNZf47IK927YySjxL\r\n0taSBzv9eTCOr9DubWc75/7wolXmtfg3Q1TNikeYFfUhyvVCPlVRjMYJVxU1\r\nJIdj0sWT1P19Nh8+b5aS3ieEHcW1GNBLF5RqCc2igS9vV8v3znvkf0J1FPzd\r\nq3P095/RdRm3XskQVUykpR92uaT+zz4VPm8w0Dmtv/T5ee4XYzUK93OU8XKk\r\n/T50J3HMLXlO97HD/5QROCdaOEQuyeQehJH8Fr9CLFBygEq1kj/R8C7zx6Ue\r\nN8vHN61N8XKNLw2NW+rIVS6WgGj5IcLrCKvCuG98oz/5fP/dcMztCGW0xPIm\r\naL5SlVWiclKQLGtXP/kzemddcRZgUoaiPUCS+eVdhYRDd3yrmCWbGhr37+Dn\r\nmDU86ZP1kCjCym3wM9BYsdLQKAlb7AXwcUSVyNQLqeGaXaEb+zLZejuZ/APq\r\nJmLib78jXa45kUlqfuO8IbtJz2WDYqk502U=\r\n=MVzG\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.1.0-next.2_1650955614337_0.15525423827924323"},"_hasShrinkwrap":false},"9.1.0-next.3":{"name":"@fluent-blocks/react","version":"9.1.0-next.3","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"latest","@types/react":">=16.13.1 <19","@types/react-dom":">=16.13.1 <19","chart.js":"^2.9.4","react":">=16.13.1 <19","react-dom":">=16.13.1 <19"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"latest","@storybook/addon-actions":"next","@storybook/addon-essentials":"next","@storybook/addon-links":"next","@storybook/addons":"next","@storybook/react":"next","@storybook/theming":"next","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"github:thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.0-next.2","@fluent-blocks/colors":"9.1.0-next.1","@fluent-blocks/schemas":"9.1.0-next.3","@fluentui/react-tabster":"latest","lodash":"latest"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"node ./scripts/prebuildsb.js && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17`, and `@fluentui/react-components@latest` if they’re not in your project already\n2. Add `chart.js@^2.9.4` if you want to use charts from this package\n3. Depending on your package manager, you may need to add `@fluent-blocks/basic-icons` to use icons\n4. Finally, install this package, `@fluent-blocks/react@alpha`, using your package manager\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.1.0-next.3.tgz","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.1.0-next.3","_nodeVersion":"14.19.1","_npmVersion":"6.14.16","dist":{"integrity":"sha512-ytRK0ZV/lo8qKNSIrTP+XHFpV3k7InF3JSoD21okRM3PdOdXfLVQsDrfxInIwJ03gva/rrQ4DBNNQE+2wnD3NA==","shasum":"5f3be8e4c6a14a3befb2915f29e83a3ac8d42180","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.1.0-next.3.tgz","fileCount":340,"unpackedSize":668219,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFPffLzq7LGPhEj7xh8M6tQhRzjVkKVTN8CKbmPkyBxBAiEAvfvC2z1NT6v6yiQfCfpbxZbRWVq1Ti7gsqIC2w4Rw/0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJicuteACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqusQ/+OV2wGEs4DIZ7D8Yq1KlS9r4ApV7FXXmuXCS9oVsmxbXGFuG1\r\nRVT7jlqZ7OXzfctrxMGh6+uCpWJZOllBOWFhVpmzHshqV2Iofuumaf5NbnQ8\r\nltjvtdqa8YKn9v0JCBLTgjcFvNiPsw2vdnsQQmFAXv05l8o5Up/2hE20mUZ/\r\nJPxZ86YDwXXL+29E3k2Xzu066t3mmVNYyxwF2rMfSnAt8p9jfV85yvqU4od5\r\nc0jkmhx5z6cdceltp5ee1Aiuo6Z6w9P2Z9NaGI64m41/qFh47vTk6D3Lxbue\r\n0k4UmlP2tYUU32sXgKMCXKl1naBD3dGeHWvgijCvkNHLMirJwFiMz4HtpboU\r\nSutoXs22SSPj5UqtQTL8XFzYtJF6Pom4rJF0OKZd0MczMXYGBM71jlNIlObP\r\nTSOyzZUm+qpQFiaNo4EVmH3fIxTQUwWfDLiwBUUWGKA/8N8HkAqZRaEnVr95\r\nR3Zewk4mIEXYHkN3AVLH37A+Symde++2utow3s3m1BsB+CaOAP12TsDHkGjK\r\nK5zFRu1btu00eatQku4GjsfOTPQ226wm9l2r3asIqHXsXSBXt33DbYOj9NeD\r\nM8kdRaNwK0LqyQIMRlzGmmfZK91WT93MkbLK7iLGbL5os/HgOHCWUBUgA/Mz\r\n2Fq8c8FYtit0m8nF5LKzYXeJ09YROsbF+aU=\r\n=/np9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.1.0-next.3_1651698525914_0.9099127229403667"},"_hasShrinkwrap":false},"9.1.0-next.4":{"name":"@fluent-blocks/react","version":"9.1.0-next.4","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"latest","@types/react":">=16.13.1 <19","@types/react-dom":">=16.13.1 <19","chart.js":"^2.9.4","react":">=16.13.1 <19","react-dom":">=16.13.1 <19"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"^9.0.0-rc.10","@storybook/addon-actions":"next","@storybook/addon-essentials":"next","@storybook/addon-links":"next","@storybook/addons":"next","@storybook/react":"next","@storybook/theming":"next","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"github:thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.0-next.2","@fluent-blocks/colors":"9.1.0-next.1","@fluent-blocks/schemas":"9.1.0-next.3","@fluentui/react-tabster":"latest","lodash":"latest"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"node ./scripts/prebuildsb.js && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17`, and `@fluentui/react-components@latest` if they’re not in your project already\n2. Add `chart.js@^2.9.4` if you want to use charts from this package\n3. Depending on your package manager, you may need to add `@fluent-blocks/basic-icons` to use icons\n4. Finally, install this package, `@fluent-blocks/react`, using your package manager\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.1.0-next.4.tgz","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.1.0-next.4","_nodeVersion":"14.19.1","_npmVersion":"6.14.16","dist":{"integrity":"sha512-bLxOFUk4bopDHueEB6lEW3dQPKEabJXpifiqh4ieWj3eDfQorwbRCIgxgVIpkKOHX7Q3kFNqgWsjjARpnylwNw==","shasum":"27b999679e75e1bd4709b350430d1d7dea99c621","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.1.0-next.4.tgz","fileCount":340,"unpackedSize":668018,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMMyiJSN8eKBRbrvOGnULobQ4YcSldDDCiE497SqobrwIgexCIW/IC3Pa5cHb6hwM7sRFTOJmZa8rodasmiysTYQE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJieflPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp/Gg/+IaX0IUh8Sy5WtMAIbtei5VWPM+XcWnTF/tHoY0iITG5Qs9DC\r\nJ/GHUaK1txB2VRwNhvgj1HF2wDuF9ASj+AtDQUEV6Wie5ULEUDF5/J4PR49n\r\nhVFmS3fHGZxCUcz5TQWIWFGQFYncktldV5Sn0Wyr/jlxTPXjNYbr+yNOawSN\r\nfIa9MFA7xIIdGAmjWmq8ADI8WATly0WWUsttA+g5X3t5ENCQvPc2kAkpoIFX\r\nR+Un2S/Npam20ZCOMFt1MnckZMm9J1Wxk1gKG0udfgUv5i7ZtezcrCjP2orU\r\nRoEGyQh2yPw0xzIzRCLQly9u8iOLFPvKMeE4EUIrXznIs8EwBU5gaKRyCzpA\r\nu67yIKGVNmAAWpk2SynrU0b3CCj/O4oWpBytYam3ngmna9xGPjyGykqEgg/m\r\njLPoTUgTvJHtBJQXYoqlZHyF8+coXwZWmVB4i7CYGNr+luoLQLnPLq54gKmX\r\nTfc79g16Io1EwynmXDzY9GJCDwfQK0MTlENbJuJXPveZZTKZ4fSV2/WkEuEl\r\nYtuVhMCdgTVNcYI+VO8c+YVjILW82buwkQRegbIR8gV2VVnDCgOrrBWOw8LH\r\n+l8wCO+Y4/juYx27vNJ5PUcIINA6srOHzxBdIIlsAMYib6ldAtOhjQ0etG6j\r\n9Nq6amQGiJJANshPQPTN62MGyeM7m22aChE=\r\n=gLMk\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.1.0-next.4_1652160847003_0.3325148099873598"},"_hasShrinkwrap":false},"9.1.0":{"name":"@fluent-blocks/react","version":"9.1.0","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"latest","@types/react":">=16.13.1 <19","@types/react-dom":">=16.13.1 <19","chart.js":"^2.9.4","react":">=16.13.1 <19","react-dom":">=16.13.1 <19"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"^9.0.0-rc.10","@storybook/addon-actions":"next","@storybook/addon-essentials":"next","@storybook/addon-links":"next","@storybook/addons":"next","@storybook/react":"next","@storybook/theming":"next","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"github:thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.0","@fluent-blocks/colors":"9.1.0","@fluent-blocks/schemas":"9.1.0","@fluentui/react-tabster":"latest","lodash":"latest"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"node ./scripts/prebuildsb.js && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.1.0.tgz","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.1.0","_nodeVersion":"14.19.1","_npmVersion":"6.14.16","dist":{"integrity":"sha512-yTpO4DkHfTGoxrn8660Fy1Q39e20rgyNLWVy8r0/mh11zIL9QAXRDHx9GXuyMD7RPyIevlVKQNnyCkgXApwdmA==","shasum":"6f99d650b11e067db3179fee9941b5ebdae4a3ad","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.1.0.tgz","fileCount":340,"unpackedSize":667990,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID808uIkJDKXZGnOEq9HirxjXR4rFiMApq6a3nwtBYwPAiEA1bC8DmGu1+GyUnUs+BZHnVyacIgqLSR84im+yx3+p6k="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiehgeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo+Gg//fc6Rzac/5Pvm1Id7zT7ZEZDvfOd1twGSSCq1PeRTEap4PZTQ\r\nuTcgHW1GVeWaT1gO81Csjq0om0Mg9YPs1FMRkG7Pdx+pUnVhbTr6BvfmJVwm\r\naj3uZ0kZQUboRF3B4acD/YK70L1lK71xELHkcksEP7AJ0rpqG8v0mPQxeK8c\r\nDAoCA1ONA0q1qXyvVKINXbOUNmQ+FspaGv6bqbMJPS59BRGWOTcl0fICk7Fh\r\nvJtrsx6v64mpOTOimpJRQmSQHU36RFnQRM0Qa5R7+F7RDw8ncqV19qfhgQtJ\r\nXZQx4gX5m0BP7Iq+aGRkdYtEMEzg9yReHPNawAd9OVqFN8VvdJo5mSWajpi+\r\no0w6UGwXinv8X2uZG25N3WOTHmF5AmsITsHLR865cIxiJFw+nB/br4sPQd7g\r\nm8Z3on+PbmlN2NlPVGD+LjDWKtiqjRuVBEbTpETW3Xj1z67Mucrf0s+x+d9J\r\n2Bcyo3bU/ihfkFfqo8IKDhZJb7P9gb4qyEazAduaFhp1y6b7C8D4+eMfATZc\r\nrHEjIA/lwQdDYKbw0Gbr7h9E9jXZ9qWkWrh9z78fBNeckejGLGN4KvieLLzt\r\ns9FIefRYtinQlPLzq8EccobtecUEIbzO98aHT71WXfygb1JbyToM1jLi3hBI\r\nMZBDyscnWx0rQplizI00oitJwj8LX9M2oWs=\r\n=2RrN\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.1.0_1652168734557_0.902740972737258"},"_hasShrinkwrap":false},"9.1.1":{"name":"@fluent-blocks/react","version":"9.1.1","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"9.0.0-rc.10","@types/react":">=16.13.1 <19","@types/react-dom":">=16.13.1 <19","chart.js":"^2.9.4","react":">=16.13.1 <19","react-dom":">=16.13.1 <19"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"9.0.0-rc.10","@storybook/addon-actions":"next","@storybook/addon-essentials":"next","@storybook/addon-links":"next","@storybook/addons":"next","@storybook/react":"next","@storybook/theming":"next","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"github:thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.0","@fluent-blocks/colors":"9.1.0","@fluent-blocks/schemas":"9.1.0","@fluentui/react-tabster":"9.0.0-rc.9","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"node ./scripts/prebuildsb.js && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.1.1.tgz","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.1.1","_nodeVersion":"14.19.1","_npmVersion":"6.14.16","dist":{"integrity":"sha512-9evT2CYuO2LCo/O4k+fSIyigxeTEHXsB9J4hYyaOJ00q7tXAgingkPe7ZV67WH14mrtWgwzDVd9NGsaN2iwMTg==","shasum":"59ad5e428bca18903e64ed2b6df9b7e277c54c08","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.1.1.tgz","fileCount":340,"unpackedSize":668000,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFz2z+odqzRJ6f/7xzC1/AUzYBNo3WkPt9OlKmsQ0wnNAiEA8LWnzQ8ZLKbvrlelCkS2LgMsqo2/rSOnCXDpytKoquM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJieqjBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqQ7RAAis++o2ZVHx2Dobjrw/jPmQrc371m+Q+tSrUlgPslqOXg6lDy\r\nDS8UxSobVXPtWToW/rhNbVSxH0wpS2qwaBQvi26hwf8UsyiXNkg+pZTfO5OX\r\nyGOR2fz9MxUbU06HDcRcWnJT84xMfyCzz3BJusL8gsiC6WNPCFEY5XMpfk+Q\r\nW/rCLFsGUmekVVe9haH/XMgkpHH/g337mRbiBEjf9EcdOF5kls24cf7WeV7a\r\nsihgXXIjOjifxlhm6i1CskfvGJxzl0Iny6BCKAnK1iPKAb3T3iFF62mg++Aw\r\nEFNcctgm+7v3v2Lcaxynv8NKBrg4vUdbCaYRebIsIJDTl52w6ohC0FKz2gff\r\ndT7hv8mBBdggLDiB84xavYfg2NOouVTXml+H4NoTzw/IBnCRlEPAc/EnPfTs\r\nG7HOYvyJtf6wPAHU0AK05X5KIsdOMm4B31X0QLDQ5IOSVLFiMXIS0+1JRim2\r\n/PWlSUf/Dm/4jFjVj/1UB1vRjSdCLLT+1Kodt+zNkrJqv8p4FiGD9AuhzOsk\r\n1nhFbgLDApR0drj3UmCENn1NX8ex9aSENEKuq4AnXo3sa4ikYBQe87SDsyLx\r\nb23HPLhpkhpTsE7vvwL653F/ep8z4JIJ5g4njvvgO88DGpqENTTfS/SJadEq\r\ntxJ/dg/sm82kRnzSfoInk5eqzFfrCTG7z80=\r\n=fVRE\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.1.1_1652205761257_0.5163041466042617"},"_hasShrinkwrap":false},"9.1.2":{"name":"@fluent-blocks/react","version":"9.1.2","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"9.0.0-rc.10","@types/react":">=16.13.1 <19","@types/react-dom":">=16.13.1 <19","chart.js":"^2.9.4","react":">=16.13.1 <19","react-dom":">=16.13.1 <19"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"9.0.0-rc.10","@storybook/addon-actions":"next","@storybook/addon-essentials":"next","@storybook/addon-links":"next","@storybook/addons":"next","@storybook/react":"next","@storybook/theming":"next","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"github:thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.1","@fluent-blocks/colors":"9.1.0","@fluent-blocks/schemas":"9.1.0","@fluentui/react-tabster":"9.0.0-rc.9","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"node ./scripts/prebuildsb.js && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.1.2.tgz","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.1.2","_nodeVersion":"14.19.1","_npmVersion":"6.14.16","dist":{"integrity":"sha512-Yfl8rDPYb9uoQUPN9QXNFWAs8/BmP7nosUsLwCsiErUGQmc0zlK/LenyPmEJwpVakCA0PxkNe/nXWn/16wu0eA==","shasum":"a473d11e71a2f3500063c9da60f35e0af9218cc3","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.1.2.tgz","fileCount":340,"unpackedSize":668000,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEMugZnyHMGpCC+1Q4IoGGIZRnRefEwOx/wIqptTYMRQAiEAjhv5yoViZplBvlCk4OQpKHIsXqGzii9jOqc8OTOQYpQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJieq3iACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpgJg//X8/FYcdxfcQPk6agt1EVqEGToi9FeTAUVdGbUBCMIUIg83GV\r\nW0pZyvo9bYSAin4LGHnVyQUSwxTTjkufv1OMNA3CaREZhAb5hVs3Uah30RO0\r\nl3PhtxMVKYhE++pHI9ldE0yJqqZ48sONCXZjniRA2m0omBBIrgDjnV8kKPkC\r\nRwDkRsz7hKMUsENDu0sE4txMSzJfdBEyF8aazlMiG/YSQL6HBNMQlQwiFmCf\r\nP00SUQZDMqN7jMJ3xTrzxf/6tbqnW75QL/VswdUcwNIRUrJowkEWwZfxZDOb\r\n9UrLDNMlDEQlVbeXyyzy3JBkmuDSPQnsr24fV+FWnoGosBZYrJjUyR2uPuKS\r\nLMq0HjpJLm2WTYzV5dDji38BAwcCuIxEEFC9I9Vft94dSR6vB1NxdBe+K2Uf\r\nlyjNiU+7fe92Wao535GlansFvFNDM2+eISCQp4nEN2J9I+9ITMrwnxTic3ox\r\nKggbW0Mn++4yw4Dy7O2AJ4hNfNcO1mARNk5XoAUVf4XIWnOmyNyY+Dz/M8Y5\r\ngaK02sAoF4bwwMTqCTaueSDPsiZgxoEztqti3BQ2i5o877C7cceOVpc/fSPo\r\nMlkSpal2lERu40KdFv0xjiPPgtRg/f2zdePSokPOT3eJERrd8uHYj5JTdFAO\r\nzPgewl9+2r6vMqANhJKM+9fbDW5K3L9Ogxo=\r\n=Lore\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.1.2_1652207074424_0.5589294232400295"},"_hasShrinkwrap":false},"9.1.3":{"name":"@fluent-blocks/react","version":"9.1.3","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^6"},"peerDependencies":{"@fluentui/react-components":"9.0.0-rc.10","@types/react":">=16.13.1 <19","@types/react-dom":">=16.13.1 <19","chart.js":"^2.9.4","react":">=16.13.1 <19","react-dom":">=16.13.1 <19"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"9.0.0-rc.10","@storybook/addon-actions":"next","@storybook/addon-essentials":"next","@storybook/addon-links":"next","@storybook/addons":"next","@storybook/react":"next","@storybook/theming":"next","@types/chart.js":"^2.9.29","@types/faker":"^5.1.2","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.18","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.19","expect":"latest","faker":"github:thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.2","@fluent-blocks/colors":"9.1.0","@fluent-blocks/schemas":"9.1.0","@fluentui/react-tabster":"9.0.0-rc.9","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.1.3.tgz","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.1.3","_nodeVersion":"14.19.1","_npmVersion":"6.14.16","dist":{"integrity":"sha512-L3Gy8GFTQAsd73JAlC1+TS8HUOuR0pGe4D7qi1EGD37DS0hoy0aLtMC2hxxe7f+eoNTUoKtuy6dRUVx4xrZoTQ==","shasum":"0d76fcee086cba6e2a9b2b183194bc702d944dbc","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.1.3.tgz","fileCount":340,"unpackedSize":668087,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICRxqTe5MkB9WStJhXq4LTo6tc4Ai2Ch92yvUsh1RTxSAiEAv9Y+n1ipOsJvyXrvzN5ayILtWN13LZDQY+J0hB0DFMQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiesFNACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqzIhAAkDyrFemSyNssHq96jPQUJc6nyqHhsUyJ46u5TX7mHq0xRUTU\r\nIWkRO47InCYQLnm8EWejVqG8gBQwQL31lB3h5v4DznwVwV9cCKY3LQzMlPwM\r\nrknXYHWEUQV2zAfeAm8vbsN3mX+4BQmifVxP07Sg5GpWF6GFFUEyLRd9O8L0\r\nE840pIif5orCIib2iKFbhOtJKchVlvCp9z2me2uJypiW16TADdhjo0Go30JB\r\nluw2ZVCrKpHlYFXCHoPmYWqqCjvyfsy6Wzl6frykPJAen+AUZ4VQi0zQ43EE\r\nPipOs2lW1jcfw0anctoHCmo2XWtqCgYppBlxc/xX9Bpd/mw5SoiccQU3U8E+\r\nEF6FjoQZ6gpVIU2xWSFgtXfgBVKTjT4FYTnBBhxnPNHuD8vE1UF3VGIRuh6z\r\nrVK0lYs0HkZM91sRfhHf2GIJPpjPR2ttO/3UWSCI8MsjpKxxuwXzJOAFeZ+u\r\nAQlyp/Uch1jDfm/oyzVAbdufDueiKGKUuVQxbGPEhpYOQ5r9xfXPWsqozOqA\r\n68PxZX0Rk53e35WeX+MMBhOXMLymxAhpDH/nECqvO8wD/yjCeyGsUr0IXotd\r\nu2bRIQNKkRwiOFw2+ctJYf3w/+JbxZUJt/tTmlmKKIYFgFneW0GZQ8QtB4Sq\r\nEpagYNwb0w5Bt2vFR6HoTh+Wkwe44HqwXR4=\r\n=R2lp\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.1.3_1652212045484_0.9625042664749675"},"_hasShrinkwrap":false},"9.2.0-next.0":{"name":"@fluent-blocks/react","version":"9.2.0-next.0","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"@fluentui/react-components":"9.0.0-rc.14","chart.js":"^2.9.4","react":">=16.13.1 <19","react-dom":">=16.13.1 <19"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"9.0.0-rc.14","@playwright/test":"latest","@storybook/addon-actions":"^6.5.5","@storybook/addon-essentials":"^6.5.5","@storybook/addon-links":"^6.5.5","@storybook/addons":"^6.5.5","@storybook/react":"^6.5.5","@storybook/theming":"^6.5.5","@types/chart.js":"^2.9.37","@types/faker":"^5.5.9","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","faker":"github:thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3-next.0","@fluent-blocks/colors":"9.1.1-next.0","@fluent-blocks/schemas":"9.2.0-next.0","@fluentui/react-tabster":"9.0.0-rc.13","@react-hook/resize-observer":"^1.2.5","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.2.0-next.0.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17`, and `@fluentui/react-components@latest` if they’re not in your project already\n2. Add `chart.js@^2.9.4` if you want to use charts from this package\n3. Depending on your package manager, you may need to add `@fluent-blocks/basic-icons` to use icons\n4. Install this package, `@fluent-blocks/react`, using your package manager\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.2.0-next.0","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-VzM/tbe+DcjkrLleEcvCFmYdrjNxlQKj6M+sVI0fpJzxUWUp0jOBgOXtTakMDJhJgdrO5YlcCP27cLbgaMGSFQ==","shasum":"1fc0f227829e019034e15789825e59ddd47f3f18","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.2.0-next.0.tgz","fileCount":420,"unpackedSize":759892,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTcymEw0xHaOijcO1L2zR8XFdAX6VJi1LxE4TiVIC2WQIhAPliFV/y8clXjHBFk2pjCYBIyon4RCdCD3AQXeKEUscT"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiqk0oACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoCUw/7BZgnkOB5uvEfeuyBogZvHsxVwy0iqXlLs1xnhSp7o/pD/siz\r\nE4oOKmAt8+k2v85Jr0ibdYlga1XRZKC2u2YPjykOtEcGgn+9AHBjL8xWKZ2K\r\nkj6XzqhQI07R53m1RJ0sJA+kvs5HBnb4dqPSQDh3DcsMLyujP1frYZzaqa7Y\r\nkbcPKw4H2q5w9GbGHuCoQsiLr6Rhg1jUwpJMUd11+6mFWtKG9rHYLix7vpcj\r\nV5ncfo3U2nNooSMG6t3g355xhgdVXzP0fJiUmZ3DRFdbD+TrZSmX0W9T+1gA\r\nLAztkuahcz7oBjeWwWY0qikhLdJt+l8BMD3DVutPW4c6hcF0U6xbONOOVCq1\r\n6GYwd4B1QsePP5Nc12F0O7YhslLdQwmuEctVcAT6A06M5M7bMGU0Iftg/x9P\r\nHdBOkJ9uWRUQsrOybpwPGwllTW6hYjhFWA+fvLUMAyF1AW1KyiQC8iqkacUQ\r\nAvH1ubz3PFVNMKv6RGh/teOST7iiqI22yJHXgZgcuM40mC5Mj7U09RWfY8qp\r\n3D/z0C3oG3jL8a3UuTHiI13ybGplu4C3kCbkV0bC2DSW2Dm+JgcXOu/HS3y8\r\n3b2cIYJJZR0tLS0WPJTy0l8sR/QLU3TZ0gj0Shc2SAxwbrgtD5NxLKbjSqD3\r\nAwdG740tzc8Xu3d0u8CCVMo5oqX20RPnOMI=\r\n=GxwL\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.2.0-next.0_1655328040578_0.9909427617254689"},"_hasShrinkwrap":false},"9.2.0-next.1":{"name":"@fluent-blocks/react","version":"9.2.0-next.1","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"@fluentui/react-components":"9.0.0-rc.14","chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"9.0.0-rc.14","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/faker":"^5.5.9","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","faker":"github:thure/faker.js#v5.1.2","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3-next.0","@fluent-blocks/colors":"9.1.1-next.0","@fluent-blocks/schemas":"9.2.0-next.0","@fluentui/react-tabster":"9.0.0-rc.13","@react-hook/resize-observer":"^1.2.5","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.2.0-next.1.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17`, and `@fluentui/react-components@latest` if they’re not in your project already\n2. Add `chart.js@^2.9.4` if you want to use charts from this package\n3. Depending on your package manager, you may need to add `@fluent-blocks/basic-icons` to use icons\n4. Install this package, `@fluent-blocks/react`, using your package manager\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.2.0-next.1","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-mT8CTW1XQxXd7kzUn3tYdsoIBnPnRdjmBgI3aCooIojRcF4unfu2phnPFXakR3YnJ9qz07Xd5SnP5Z/yiXHkDQ==","shasum":"0d2b944d8eef7a76f581f56b18ccf60c93fbf20f","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.2.0-next.1.tgz","fileCount":420,"unpackedSize":759906,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAGjF4X9dwBbZJ+5w87ZbB6k6EoHmpc1AVRmy9INoVlnAiALJpdgpRHzpjCRBvpxEANK4vBYe8ZHa5CsmWjL6Hm/Gg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJirN//ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrzSw/+Kw10AnwRamI1w3u4UX9sVJz4+JzX+DiJgbQrVpjeg22HytH1\r\nJ+m2sh2y/XXzr2qA/OXxTeTLIlEu3jB322SAfwX863AxyD0+Pw3096kMnB3T\r\nnTV/JfYSmCNkvOD0k8NJLN9Ctga+xnDPrNkPhwvYWe/9nKv8CCk5aJJVTOWL\r\nqmMa+G79sVUv/pT7GpZRvomOuRbM8aBFMqFrRT7oHsrnK1QdO0rCPfcWBC5h\r\nszWqOxK7GxgD8f6517bAdATFXFUX2yWdGJebHVj922EJ36B8OZVY+sP70qtF\r\nr55H8L33VyBcdI1YoctwxzpwhpF8P+zlYZnLQwnJKFQ5tvBPX7GYD4j18FBN\r\n14CkfXGadWsghZzA3nmzdWhlLDChi+BR80RmUyBe03YLo0JqeuLrVwdiBhGl\r\noLpZnIB+6mBzc1ZBOiG6mZhDWvGBrXfNuJGlywTsyl/Aq0X16qOB+Q0zUe0+\r\nIOOs9cjWad6/iEiQPddrk9A4x8tXC9/qz751oRd5Cnzn4mDrCkpvZv57ay1Q\r\nj92kLVwEGDRW5Ex2bfWnePUsfe0HjAHukfx2eSzmbC5G1sp3haS9/DZOoO4O\r\n7/AEmXQKqDE2aQJHcf3ZwvGyEkdu+nAZB9MvELuP6ueJub7pazPxk/Zz6uqi\r\nkVvvKHJCMA8s+wU+IzeqUe+rzDwmIr8KWoo=\r\n=7HfR\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.2.0-next.1_1655496703225_0.2293466257622332"},"_hasShrinkwrap":false},"9.2.0-next.2":{"name":"@fluent-blocks/react","version":"9.2.0-next.2","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"@fluentui/react-components":"9.0.0-rc.14","chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"9.0.0-rc.14","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","@faker-js/faker":"^7.3.0","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3-next.1","@fluent-blocks/colors":"9.1.1-next.0","@fluent-blocks/schemas":"9.2.0-next.2","@fluentui/react-tabster":"9.0.0-rc.13","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.2.0-next.2.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17`, and `@fluentui/react-components@latest` if they’re not in your project already\n2. Add `chart.js@^2.9.4` if you want to use charts from this package\n3. Depending on your package manager, you may need to add `@fluent-blocks/basic-icons` to use icons\n4. Install this package, `@fluent-blocks/react`, using your package manager\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.2.0-next.2","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-xWXz3q1ZGXXgaoTZSiEyhqVpN8WrK1E7JsrM3zF4m4G2f7FYmbcfp4bWYEfhD4lQ8Eo3f7f+OktFbdIB7wLj/Q==","shasum":"f9ca64c289c609806350c4219a40b8077e4186b5","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.2.0-next.2.tgz","fileCount":412,"unpackedSize":773437,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHLDbxngRH4/p4UjH2e7PLV/oAG26P+jh7gK4Z/MvWjwIhAKfhZodRfQWYdrUygYRq4cRg/1kqvq6Iw7R8trkqDmXK"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJislaUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmohxg//T4KyLuwGnW15hhDqProeqSsNUbsK7CTsO/1cH/7yquOl3TLk\r\nsbqC35xXt1Het7eUOzEwFACJDMU0D6PRn1vFpNYPDgg7SE1Wdv1t3msEEoPh\r\nAvHA9R2cgq4FW821H/QgIXD7lGWcJEcOg+fGUUAzugWUf5zLew0ZcRJ+i06W\r\np386l9kXxgfkR82Wlt6HDdQG+7tXRH6NK9yUQLTHgOcUoAb6MKBErhHnS3qS\r\n1z2BHj10ho9inIFrs1PJ36YMe2MFrpUohAdw9F6UA/VI7Q9sZoy8NPS8kXxm\r\nBKSLkImJeotBEn+XAbI2/oJKEQczWwtd5b4t8Z5Ge6VbVF1QhFLRqhQhbgel\r\nbhgxFRWVT+LgwY9YWwltkLgx2SNl7OchVi85U/tSKTddpVUDGDmGhIHYxZx3\r\nJ05mygMDtbE33UOm2bx3gNUhOC4I6oJs1OqFtVnv9whM0pyl8KYlD2m8gwji\r\nqSAAsXCSvPkT/4wVW1gELgUEu0GXnjsMsMIyftMUq7oBMyeHKfK2XwUba5zX\r\nTta6VSdY2nSdovwbXbjwYcrTplXBSRuYVTL00mrKVwBVjwX5Yj4LR3oVGEpI\r\nhiS8nJxhQ9pR+Ss2pI0Sy0Q+wL4QTSHDj2PkgwvMqZw3wRyt657NTpNpxOMy\r\nw3h6uaFzH8EuWwzSCIK1/WLMWY00V4Cl9sQ=\r\n=oTNd\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.2.0-next.2_1655854740567_0.2927147990259944"},"_hasShrinkwrap":false},"9.2.0-next.3":{"name":"@fluent-blocks/react","version":"9.2.0-next.3","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"@fluentui/react-components":"9.0.0-rc.14","chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"9.0.0-rc.14","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","@faker-js/faker":"^7.3.0","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3-next.1","@fluent-blocks/colors":"9.1.1-next.0","@fluent-blocks/schemas":"9.2.0-next.3","@fluentui/react-tabster":"9.0.0-rc.13","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.2.0-next.3.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17`, and `@fluentui/react-components@latest` if they’re not in your project already\n2. Add `chart.js@^2.9.4` if you want to use charts from this package\n3. Depending on your package manager, you may need to add `@fluent-blocks/basic-icons` to use icons\n4. Install this package, `@fluent-blocks/react`, using your package manager\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.2.0-next.3","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-bgT7L31BAuibW3Zv5EGQC4hvPFcXnfG6SefptHtoPKozso0ugQxNbAIoNjX5lET5+jH8zQAYP1LmW0jSlX82dw==","shasum":"c18365ffefc4d0d5cef599d05a57a2ae975411fe","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.2.0-next.3.tgz","fileCount":412,"unpackedSize":774567,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCS8y0gWytkNB4bAX6548wOXaqs5lvbpQ8xA1SSDbUJvQIhAInjfEkUj2jzZoWj2hgIeQcjZL2taV32FIUGq1IzhNcy"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitBODACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqbGQ//bP6M5SUew9coujiXE/Blsx52ruEEm8ukzUcBY8oVxv+ibeuA\r\nP7QhKYYaC5ZKDSmKweHmNpjSO70R7/Qnc5spQWPN4LUcih2dLRu8r+j8z5PZ\r\nv9CjwNnd8GsTlDc7AnJcxDZKLC4MHqJYyB8vtiWJ2b3hFqGCSX047BGPUAjU\r\ns6ZMDQFqnODOa2oX5NsowF0ko0N+Q8xCycH9B225i92Zi0tchPIUtDTa7zAc\r\nrv83TeTwJlGcIa3hUSvrAxfH4C+aBdL4plyBO4441GKg7P2+66R3mCOziapp\r\n4u3qxylaVh+sQVsY6RBcgmflAD9yRmvQEULxqb7K6hmuPgGDD/znaR9AGeL0\r\nvtEJDAa+v69jFwPoEtNwa1Ajw9hBrx9BpiGmtTMU3CDy+0LCRwASvmHb7ueQ\r\nZhozhSI+9PDcGxdEpINdr3WRGHHsVUzmLYRQmBCjb3zV9exBZeFN1XtHTWYq\r\n+K2AFKwS/v61rBiCt4bE1e36vwbIvM5hzYRiRbhaAVXYJcMw4s4ktXx7xB5H\r\nWwmTTnSfmzXDrvSgkfl+OsQc0RcjyBtrd6GZh/h2BHXKSegRNPEW1u8JhAvW\r\n1weWsiMN5MLx7EpbwoCV/7/SjYx6+Mk6iQV7bUbxBXS6+aswVKikhJHcrET/\r\nWnWhq0PgUJuDY4qvDD/V/R5vVPWHkI0nXpc=\r\n=LOh5\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.2.0-next.3_1655968642996_0.6256990514186809"},"_hasShrinkwrap":false},"9.2.0-next.4":{"name":"@fluent-blocks/react","version":"9.2.0-next.4","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"@fluentui/react-components":"9.0.0-rc.14","chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"9.0.0-rc.14","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","@faker-js/faker":"^7.3.0","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3-next.1","@fluent-blocks/colors":"9.1.1-next.0","@fluent-blocks/schemas":"9.2.0-next.3","@fluentui/react-tabster":"9.0.0-rc.13","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.2.0-next.4.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17`, and `@fluentui/react-components@latest` if they’re not in your project already\n2. Add `chart.js@^2.9.4` if you want to use charts from this package\n3. Depending on your package manager, you may need to add `@fluent-blocks/basic-icons` to use icons\n4. Install this package, `@fluent-blocks/react`, using your package manager\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.2.0-next.4","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-F+9I3ntca0yyahDYfrMZ+AVqrMsoEag7LHWevYbive7jb5fzNr8xudpbxxlxClt0l1irFfUqWIgBwAn9zT8wGw==","shasum":"58c48866bc2c1f94565674828d6c92505e136f56","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.2.0-next.4.tgz","fileCount":412,"unpackedSize":773987,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICXi9nToESRBscd+azdN24Q3HhcAO+aGDMrSYcn4kMCEAiEAmkql6Yi5KnDoeRfbcFrLGq7x43/LDK9s7FoYNijZhL8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJivAXNACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqZig//eI28lhsl0uX0TpS328SVDa+Ea7ig+TwasmJ1rDgbeIf6Xldh\r\n2ce3xpyeupusAhrj44HMT9IT2POt7JA6Bn7s4aJw//mMRpWJw+9u1lWQkK5x\r\nMkUJM5D+Vm33/5COCLkWkTaf973Rul5CEstRzbRg84fQCIiJymMhJ5V04Rdf\r\n26XryHLCtG4umXaGPvC/pwu1C9KE23zeAQQT9jfRMdH5mZ/Z4w8AKM/CcaYK\r\nk6Fq3JpZrJo+2h1Zu0xw6AXBhxPuUv2OUWlN+rB7DfZko9kJnEl1fVE1ifoo\r\nqB2IGdqZxF6qBrEI0z0DJHsp2IPwLw+fjz8rtqXyPWppKcke+h7+TPvRyElt\r\nDy26dZQdn9RkeA66uf5059aV1Cl+l4T2Dr0SDzbXM96Io9rdgt+v0SV9px3a\r\nw6v7DLIow5mHapZDTWcvilVxVj+w6AmL9t/Mg7WrDh9d36ywb83H7D7zuQUA\r\npKqZ0WtJQl18UTLuwBFWR7YgYD5WYxEDkxUmrDNBfXAw+dmQ0F0cBagcAs43\r\nOXQ9qx0Y1RJoOYSOGgBhPiasW352MgbrE+QdmtnboxZJHTKJ5x0W6Z7+BZ7i\r\n1ay8DtXTpiJdOwcbRfB+Q8CmcWux16T6W+NkWtpElcMAlwZYbnM4aPOQxLlL\r\nOArmLNIjT56bsWnE4zLqzUpD+cFAS+HzFkU=\r\n=+tGm\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.2.0-next.4_1656489421542_0.18289579764546926"},"_hasShrinkwrap":false},"9.2.0-next.5":{"name":"@fluent-blocks/react","version":"9.2.0-next.5","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"@fluentui/react-components":"9.0.0-rc.14","chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@fluentui/react-components":"9.0.0-rc.14","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","@faker-js/faker":"^7.3.0","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3-next.1","@fluent-blocks/colors":"9.1.1-next.0","@fluent-blocks/schemas":"9.2.0-next.3","@fluentui/react-tabster":"9.0.0-rc.13","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.2.0-next.5.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17`, and `@fluentui/react-components@latest` if they’re not in your project already\n2. Add `chart.js@^2.9.4` if you want to use charts from this package\n3. Depending on your package manager, you may need to add `@fluent-blocks/basic-icons` to use icons\n4. Install this package, `@fluent-blocks/react`, using your package manager\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.2.0-next.5","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-fhqdumtIGy99y95zHYqqq2pGWJL935JqQARDrqDAj4xPn/NDC2Ypo6rOPeo945QCVIwUbQMKCFCHeqkVPY284g==","shasum":"7950a955d716131efeba7ea473e3471111277fd2","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.2.0-next.5.tgz","fileCount":412,"unpackedSize":774147,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwdUurE+sINrfLvST3jSZhU/2obcggkcC5zHzJn20TQAIgYfy6sJIYIEuzdlFPti7d8af4iZVkwkLENYRTXm8tuZs="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJivBHtACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoZTxAAhzlvfL+RvTDw0MshjnV2xW9HpidlmFQgRl2xIaleZGw4EZCA\r\nGgLVV1Z1T5m4camBGHuZw1prWyM9xa2AHxbUCD0Jreq4oO/2hyugYZqmrIfQ\r\nRS3oJO4Mgp/seUoteVuucEh2QsdrFX3h4+WOUFHomrvRoaeeJZseMTlKq00e\r\ngC88LySa31u8pRjDTYueEtd5m3fcjFNGwOuWqNwxl8jS/7lJ9riYv6jBzDmT\r\nLoo/x9s1XxP76NkkTdNxvaL63p9qqLKG/3XBIieSIJQozSYJXCFjh2r5Z//g\r\nsnNQCU4IBm4KbNwHHi1SrDVV4NAaLYHMF/rCfEwosOvbKXbIGXwA6VlEE7Rl\r\nt5BHIuVBagPBX6N4D9Wku8FGcXxndDAn2xhWzrIWdfdF0pLEJUie9OTwweoQ\r\ntwg6HHnO2HACWzAda8AztdtFGEWNfOs+Yzx7F/mV4MnogIsdyrkiwD+OoxtS\r\nGBrhD9IQmPHeTC8KJ3uoWRGAPqJuSIZHdFcfVuqCZPvEaJSYEQM5wJ2fubzY\r\nRkJHBtWdywCPtrxKcNM06XZyvA6ZohOuv/81MC46IqDuIMUijOGsNcgf/VAT\r\nEJfW38HvKTpSTS8/SUzYIe/vLwkrCAln14wFgJCBxKFsnRaEtDdoQQC9DIrg\r\nziJPDFjgNR2ZKY7FNuD+fbrk4Fr1FGA0KmM=\r\n=/w1L\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.2.0-next.5_1656492525335_0.4131412431199053"},"_hasShrinkwrap":false},"9.2.0-next.6":{"name":"@fluent-blocks/react","version":"9.2.0-next.6","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3-next.1","@fluent-blocks/colors":"9.1.1-next.0","@fluent-blocks/schemas":"9.2.0-next.3","@fluentui/react-components":"~9.0.1","@fluentui/react-tabster":"~9.0.1","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.2.0-next.6.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17`, and `@fluentui/react-components@latest` if they’re not in your project already\n2. Add `chart.js@^2.9.4` if you want to use charts from this package\n3. Depending on your package manager, you may need to add `@fluent-blocks/basic-icons` to use icons\n4. Install this package, `@fluent-blocks/react`, using your package manager\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.2.0-next.6","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-NFmq+y7SJnsuVfJ6tVzgWLnFbdq+Ug6wtCisXKiNsVzd0CVOaf/eSN4zcZ5mT0fwLN6jPpcttWxE0xWOUn/VzQ==","shasum":"83e439cc5c621a3c7f62884ba471c9d1c0d352f1","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.2.0-next.6.tgz","fileCount":416,"unpackedSize":786140,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAthDlV80hEIy8BWpRhGqMrmvVLW5x0JzQPIkN6IuMoAAiA3WZLmoCMUKYaOEg+aBIAsvF0vPb/iy5Y/5kB/OFDbgQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiwMtxACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpAABAAn4LWqohAqsXAgcGypv57Qy0mlAQaI5jYCWhr5+yWs/iws31A\r\nAyS3GS4juB20VJR1LInzlZzqyYVkEQEAq0+gF22JhoWAWgOQ1X9/oTfK7Rdy\r\n/DL7h04Ua6a35TeASLcFcyDNWCsMD3aouSTRYXKMUgoKHml6hWtT7FDQS8P2\r\nFJa8V/tPSgcwGxXwP4RhrZgQzJuv2V+e4B6lyEezKc5TMaE+7Q2yUMrB49Ps\r\nZd4KuMjBk6Lt/tqPd1CD4Jvo5Qubl/B4hld0OZLj7JqUoDkrTpRzHrkO+G0f\r\ngUBuqOGprwJmfW3tRjjiSjpHI9x6+2iYTziPU4LxwDILMn+f8pp6MbtnZ7pY\r\nkYPMMWecq0Y1icN9kifMduArfqj4fTxXIWXNhUFxp+KDUm/CmLx3V2RfMdTr\r\nEsBI2rq4XhQ/WUMyU0QFfvpQYXoXwj1KMQmzc04XdzaB+VCRZ7sHYNmVL06r\r\n+PEJiBGtoIly18Unhp1JFVZkjNH39p6C+LjUhJ9UZ6ok75ZTK8iQ3t4c+4O7\r\nTDoG3hqFLwhbW3Aasocyd6S+D62RFNU69+2JMDh+EIPK723ZEy5Kh3+OxZnz\r\nfCT3e5DF5MQ9uatmgvkM0/IKF9MtRShetjwg+i0AaEAZ0lUsioN13agcvlST\r\nzFI///3WbAF7bVywMlGBuRQCqIUZVW396Is=\r\n=iYoo\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.2.0-next.6_1656802160903_0.004267129705629813"},"_hasShrinkwrap":false},"9.2.0-next.7":{"name":"@fluent-blocks/react","version":"9.2.0-next.7","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3-next.1","@fluent-blocks/colors":"9.1.1-next.0","@fluent-blocks/schemas":"9.2.0-next.3","@fluentui/react-components":"~9.0.1","@fluentui/react-tabster":"~9.0.1","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.2.0-next.7.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17`, and `@fluentui/react-components@latest` if they’re not in your project already\n2. Add `chart.js@^2.9.4` if you want to use charts from this package\n3. Depending on your package manager, you may need to add `@fluent-blocks/basic-icons` to use icons\n4. Install this package, `@fluent-blocks/react`, using your package manager\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.2.0-next.7","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-eheq+ecpJt8EEfVytFeHIdXHLfEqS38QuU47D40OKWjSi7RPrJn55Ju2szuQqhkq8kcmUkThlq9qv842lKd2mw==","shasum":"21d3730724dd9e699f662c1ca3a1eeb2828fe841","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.2.0-next.7.tgz","fileCount":416,"unpackedSize":787525,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB201JOkDPaV0e/rQzcj5NuAQdxdMiBJuy8G1CKIvjZCAiEA5oy8zaHHDPREpODfEDzUsJzpYhzThlhlqZwNWqaG0cY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiwOZ8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqlNg/8DnQvZ+eDbwXaQb3yFiRE/5cea6zsschzC0R5AcT0527mSXIs\r\n4qqIRpHBk7gZGWDP3FQ9A7QiYLmH4UZ5TIpOndx7Fo7eYfCms3MOcftt/U/a\r\nKneDhhyk8ljGNdvMI256+nlfaZlwFu3+gmWprLR7TwZUIVv4H8UU5VOzRbpU\r\nFvSw9gPqtmw9NCoDCl0Odc0j+e7fk/egKTyG+YPEtvvBbZvg/PG50FxsFDBV\r\nhi/s10U14nkEUjOrZUa/2GzSiP85sekF3doShwsmLZJJNVS+so/jAHfMiBvU\r\nP9BPJcACWfaZ1N8VXZRARrEOJdCXcwgvYtr2XGPSmxmcd/u8RZYzjorjDIIx\r\nci0dUHKtiC8VJpNLBUp9tEAzotz0CDkgtjVVSe56VbNtd4PJNgDgs9/z/91w\r\nMfae47ggLVOQZctr1lzZNkrqEY4UrrAPaYnGHBBB8+fohK4wo0G1k5GcpPIJ\r\nUS1V7OpGswufmndgb3+N//KoofaZeq4LZjhROq27aOvEaVsjDnfiDSA3u8qq\r\n0oHc8ixihbNB+P9aNT7Lbfvg0EUkaylmScgzig+7+me7F4u1TcDeyQ0MHLNU\r\ncl1BDZRpvNGSt7NQeGSU3bx0VA6aQa/R+S+p0rl4bKDP3MbmljDEryAngdfP\r\nMekWb3bGcTJ3m53VhfMSRIX4MJ/0SYTiCXU=\r\n=1Fkq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.2.0-next.7_1656809084463_0.8141678143441824"},"_hasShrinkwrap":false},"9.2.0-next.8":{"name":"@fluent-blocks/react","version":"9.2.0-next.8","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3-next.1","@fluent-blocks/colors":"9.1.1-next.0","@fluent-blocks/schemas":"9.2.0-next.3","@fluentui/react-components":"~9.0.1","@fluentui/react-tabster":"~9.0.1","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.2.0-next.8.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ In active development\n\nThis project’s API is subject to unannounced breaking changes and is not yet on any release cycle.\n\n## Development & contributing\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17`, and `@fluentui/react-components@latest` if they’re not in your project already\n2. Add `chart.js@^2.9.4` if you want to use charts from this package\n3. Depending on your package manager, you may need to add `@fluent-blocks/basic-icons` to use icons\n4. Install this package, `@fluent-blocks/react`, using your package manager\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through SVG sprites implemented in [an experimental fork of that project](https://github.com/thure/fluentui-system-icons/tree/master/packages/svg-sprites). The `Icon` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nThis project currently expects any requests to `/sprites/**` to serve an SVG sprite with the appropriate content, which for the Storybook development server is proxied to a specific release on jsDelivr.\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg\" width=\"320\" />","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.2.0-next.8","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-/YuItuoV9dg86xjZ8tpoTEalBN9jyDgn5Z4ktOEWteK0EAXDopKEplHMMZxLBboUbeB+JzIhIjnTnLsPAsJ6ow==","shasum":"bd8d879adb4d93a141b71256f398ca0661a9b9d3","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.2.0-next.8.tgz","fileCount":416,"unpackedSize":788061,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEGwLcvV+BhAx/6PkOIoS3qrN76LgbppOlrhoMfhNU4TAiEA8Aphxa3o7HvYg02sYKUpvi7TBkZSIK8VIxYr6DqpB6Y="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiw1h+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqoMA/9HB+4xwtigKKgL1MJBxgZBsKa7GLssY6xt26zGNby/UYPknOc\r\n7XOFEfznfcOB76XQ5pFZOPKArMGukrE4KgZV9pQ2Y28ej8FFLtNrK+keT3Ue\r\n7wRKi68eJGT/fof/Mp5SDBv4/qXu77d7VGvrSQnzZj0yMuAIaTyLzMj19udH\r\nY1JLNQ3SEu3ruSBPZ+7GkZTRn8kuJLvpSWP2rNqhn8z0jia9fip2VmtB8JR7\r\nnLYwJPua9F8brfsvUBZkXN62CtbfFTDYB/ucbX2pek++CBqXmbo+1GvNKJrg\r\nuMJe46WKukZLV19XixPtzQzlFuQUV1/n91H2tFXknSvAAQcbxXFWkcPRZJg0\r\na8lApoHEM9mPRmxoi2Tn5Qy17yK0QM9W5d8BpSrrfufGk+VWHxjZuVRFDe8H\r\n9MhLQiXf1XU0GaszTOiR/QgiI33fHrWbUO8N4i+3HojXDfuaHsUaev/tfKXw\r\nTBmkqM1DdJIvZUp0qrSn5hkvW2Cyr+F8WAW1WjxDgPKdvQrrhmfKNQHkJZFU\r\nhpFdrODw5CSV3KC9FmcMXIADOG8FlfS/ODMxPw+M0mDvykMkC9Mzgzm9SB8r\r\n5qVvEkO2n8mX8R7c9evAOZiFutBkKX6aSORuTN6dx4Xktjk7t1I0ic0qmnIT\r\nRdUEFL1qSqS0FPSvQDxoQW1w51ne3Dpu0yI=\r\n=Up8P\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.2.0-next.8_1656969342465_0.32465195921391854"},"_hasShrinkwrap":false},"9.2.0-next.9":{"name":"@fluent-blocks/react","version":"9.2.0-next.9","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3-next.2","@fluent-blocks/colors":"9.2.0-next.1","@fluent-blocks/schemas":"9.2.0-next.9","@fluentui/react-components":"~9.0.1","@fluentui/react-tabster":"~9.0.1","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.2.0-next.9.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.0.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.2.0-next.9","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-b71e5Sx091OImMzuEX956BwevLZMdZlc6PURvcdP+/X2g2FJ6tGIbKyJn55VYSuBVtn54jZzAs17FacWXOijlg==","shasum":"01edf2455d46d0ef1039b394dea6a434ffa352c0","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.2.0-next.9.tgz","fileCount":416,"unpackedSize":789620,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEBiEiTGUKgvh+HCPcVZlx6n5252fw0Y5yHNq48YrAbgIgSGWhCr1lg/bKpb8X/EAiuUpCHNWZBLSkwnkQOcYalgY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJixo7cACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo8NRAAgJVlG9CmWueSlUWgZ68ZcodxWAsjWVrvjBDF4QRyqVn49cen\r\n3C2YgL3DgzOUFpv49FNlaoxvg3r7oqkJrQCiSS9TcKv5+sWL0mUV/2lyclq1\r\n5DXwgLVR1/OJLvNxoEeBB0V0yHQOwkAOcVVVAE8OWjaAf52gwyPJnFxsGd9k\r\nyxgCUBLRmKV6CBCGMDzrMKRE3FwrvY8e4djSEKDhQ2GZ2fExlXlfXuj8iy4Q\r\n4SQwS0yWJhePcoVFgg9VObX+upsxJVVGdso79oOGglqsKQgmAwf0RTcYNzqw\r\n01MdLdD0QsmybF4Sl3GpI++2swNkIJIQ4LRHcW69bfKNw/VlCEpjLnTz2qM2\r\nH2Kflx4pdQhki9XED4Go7EvkIJqfVsEZEufJGFvY7k6XvHEaWwZOmjQh0lMH\r\neV2AEZEGFoH7OjFxnHdlt06v/IiNraPw5TNdJ3usQCVrLFLg9ZYj19Mly5Yt\r\n45Zd3DGdW1zrKbq3zm7QQUhBwzJscHIldvHOLMaTnCce09mIGZLawxVtSBZf\r\nqxCPmnEWlbky8c5eivte9Tp+fZ1pq3hLTQUyHSyvPClWBvBPzg12fVgV8Ipk\r\nOwuwTD8FNUOq5dWVbvc+zozTtTJGXCXlfiGURSTMjDRxqsPp8useKMvCNjDl\r\n6l6INgLM4Gv+aBkGEy5oIOzoiauLIJSO+a8=\r\n=T6HT\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.2.0-next.9_1657179868361_0.2348139462277825"},"_hasShrinkwrap":false},"9.2.0":{"name":"@fluent-blocks/react","version":"9.2.0","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.2.0","@fluentui/react-components":"~9.0.1","@fluentui/react-tabster":"~9.0.1","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.2.0.tgz","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.2.0","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-ab+Wt0q1tjRpAQx+Y0ciKwWd7tJJgbrFe6nDfLk6iCD5uBdJ5ol9gJDD9wGZP6+ugxhpedp3f+FGs7aKr4M8RA==","shasum":"207c17335381836fa0bef61a6ced1ed6653c0f5a","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.2.0.tgz","fileCount":416,"unpackedSize":789592,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCa4DXli0rT0AsQTBsJ50wyivCZq3J+Daqpi3EcoEqLqwIgFu7Vt+E98AEthNQyyhXW4LFAI5P5c6cOLwSDCKgGh3w="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJix2XJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqygg//ewHBalKTyy+WRl94fhyLPgacsgEXLO6yJDqmniVv0JpmjnOi\r\n26g+sPr10OFEJ0+n5QzovjE1ccLjYyP8KHBZUh/CqC4U846Xgaufn5Dy1TBM\r\ntYPGrv0L6xvUHuiz87tI8nIPLsNj4Qq7BfhAmKRzZBTuUlF0ZVIvUbLoPn9v\r\n51xs1InosMeg89CaqA8E89tmO/cQFqhOqyXxRC10s+4Opt0J+j8isLDvxkf2\r\neDJ8tfg8/gmZ3ExdO2p8cu57fe74cUaeTBCM3ACHh90Lt0vdEZl/tUbcB6ow\r\nz4tG5DW/4lkiO/US8aX6m7heOvGPKK7tSahVXlyBUOb7GCKn697CKh4H3cVy\r\nh0OPsu1EdWpo2nhn/Kg63VEu2013kk9zdTCiLrlUn27ooY1Bc+GH8L/u7Hay\r\nWR/vStih+PCUAWEbU7rVUs9Ws0AVZrpGTIFeSeWh5FepGfbZ31a//ncxXaNF\r\nQr7RA5cHg7ejlH3D5vA43k784IyHtT1EutRFLKVjIGBhub2PgxdrbUPjBQV1\r\nKXiKXS4ZJckmTibW9F6RJJrNa0xqPgvtNI1KMbEoQslSyAoFw4EAv1G6bI4/\r\n1AtntR7U6YYKoTxGgVbd2c97cNFKGhw7SkDk1IT5pDJqEXRvblLwjl+gnrNC\r\nEgTwplDIix0VCiln7YToUkhE8be8g69YIXs=\r\n=OQVv\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.2.0_1657234889453_0.1149428842434026"},"_hasShrinkwrap":false},"9.3.0-next.0":{"name":"@fluent-blocks/react","version":"9.3.0-next.0","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.0","@fluentui/react-components":"~9.0.1","@fluentui/react-tabster":"~9.0.1","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.0.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.0.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.0","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-TBtqoj9hYIjPZB3dGjkkpR/FHY1WFd0V1NbGxbG5cWjGTFZPERGHL0gtawrJ7YPp2bkCASxwEM9DvTaKx6j3zg==","shasum":"0f89a8b7a4caf515d876027cd47aadc822a03b82","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.0.tgz","fileCount":416,"unpackedSize":791678,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA14+RuJRqMXRySNlqDBi7+onM9fngUXR8huj4kfkDY/AiEArcYG9jEuca3nv6tidKoTV26eOFjy7gJYaTmtv0XOb8A="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiyJCsACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpJrRAAgOu3jGQa5FqU1IK8XgQxJltKfYBugeV1aYStM7aKA2PFqriN\r\n00sxXqp95owGnTBUX9KYzIIhTes1jqdAyo93UWImzXazGzG9q0QDbKmfoZGZ\r\nB60p/LuT/NUxoY4ywK+EvW017oTQnnyddfeQZ1wQz4W10ixrdFEa1bctHI6m\r\n5X1++4GX8xrNpAB/dwCKA9mjqSSX2df7o5oB5cdW2QIV9HQS9oey4Tt+/CMF\r\nNvmey2lGzCcxmKUWWyuH++OBZDiiHlASnS0IdQTn+riAx2UAlOLCgtwtNoO6\r\n0vBTPG3O91bYAr1CQkhUOOzbRGCZ13MnVvize9NA5M4H9aN9HmOayopnQ2LT\r\nE1FSFbpIt9zNEjDQKLIGHiy49LC2vZ7lS51hb1kfx+BP4pQLYqubQboTnNtI\r\nfcm2SWP6n0VS60d67mOjzDBof2sUQAwc8PGOV1BheS8zzM2L82+OD7e97uaH\r\ndKV4MU71KwMwcUP6oXG9RafupTKjdS5UGrj2OB25RVWnjrSfIeqIUUWX7K+V\r\nrpDDMU65HDhshgsTCK4Ltckp56NU7MaTsHkIqvWFdeduUruTV4x/Zw7gCaPF\r\nJD1dKuM+8e5BewurPL15KK9AdoRoKo2sMmRA5oRl1O9RFtFfw4i/Awxxi11p\r\n9jbtJ1GGE3y5JXMbC1CBiguRTV1dSyOSnCk=\r\n=qcGf\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.0_1657311404500_0.6752820517314297"},"_hasShrinkwrap":false},"9.3.0-next.1":{"name":"@fluent-blocks/react","version":"9.3.0-next.1","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.1","@fluentui/react-components":"~9.0.1","@fluentui/react-tabster":"~9.0.1","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.1.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.0.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.1","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-ZFfydMnT+pDnX4Lp9jx3QkCr1A+KNe3LC75aMBU+r8buYzuiOz2gp/Q/RCp05O9hmmZy5nWfqDLkkyGJAkTFdw==","shasum":"f3d353b2b16ea19ffc6ab23f514d2309628a6725","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.1.tgz","fileCount":416,"unpackedSize":792787,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA3uVxl7rJsSdBrLPJlOPrpSJ11o4KR4gff3uLnJP+PcAiBo3A+cThv0nKYNXrNQIZ50Y4/u4re8vhuOu/0k9JSrKQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiyNz7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoqig//YOrQ/CN7oj/OakG4qVc42WE/RTao55p06X98Puz8jBB+ty/7\r\nQxZzS/YIreNauLUFBarlJiJ4MhGgC5QJG77tTM5mm7dL1BaxMBGpweF4+ebD\r\nDc5bA9Tm+wt5zxJSHUlIGkYhQxy6gWLkLrqYWFmHlSMhKVOt2z9Hc1qq3MwC\r\nhdsMiMnrv5JYXIhKiArvP7Lk4uH3txcbA0GrK6h+5LfnvEmMkKrrkUW+p9XS\r\nBsdLj7k70eXXvTMMduvQukzd7WBXJQLUoHZa8ltCtTj90GZAC0CsP/9xZy0W\r\nKdrSymUcbzBAFfp3mBqyG2hQXil5E+RVnfpABRcKgYs2cc/Jb2jzKIPyJY8S\r\nWlK1Y4xpu8fmmVDnn3hyIeF2U7fBW3Lw/tNrQr1oHInA7dgHHa2R3kBk7POb\r\n/uaeg/FxpwHzjpQIJrRdOXnDzPuiDgeDHsfee6r2knCnbqmmGHyDna+5Rw6H\r\nsW9Gshiwt7ZAQ9WIG/kKtI/8SXZNxuHIWWx9CCjp9jAraTdsjbW/5YtW/Kp8\r\nY9FHsNJ3+5ov3l3WTquy96JZj2fmpZUOty2c0ZPW3JUBxqaMh5+m5ghhNAx4\r\nuQw7nXP1HU63kBHP9jsewDN9mbQerGzBeTChiew32e8OWldDiwvxuGk1fLkt\r\nhBAGFoJrggYl7yAPTrm4TPiOuRhNth2t7dk=\r\n=s2bW\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.1_1657330939149_0.3615974432379725"},"_hasShrinkwrap":false},"9.3.0-next.2":{"name":"@fluent-blocks/react","version":"9.3.0-next.2","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.2","@fluentui/react-components":"~9.0.1","@fluentui/react-tabster":"~9.0.1","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.2.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.0.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.2","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-I5NgDTC0a6DkzIXSnamq0/emDRBq0uMYBtQ23R9yqptnGOiqNyuJxyyArofviNSOQ3DHl5NRiVQDnvu5dZm4sg==","shasum":"e66d973f79751a6b1865ef822872f2c756fd7def","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.2.tgz","fileCount":420,"unpackedSize":797385,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCL69HCuxsbiswKviMGR1xSSt4d5RIj5Pqy5ZWeQhjpXAIhANOzTZFzF9BxJ3aXg5qq8Xk+HDSoBGc4Hee9WxaeLdwr"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJizgdUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpPvQ/+PXOGNmdjru1pDfZsDP25aQsMDXYMUMQB3IqYZ32Gp0xFynmW\r\nQfjKRlkuxjq4NKKU5n02id/r+Fvc18/pEl5gitRRecrBkaNpujFOOxYZbNXp\r\nzlqr4Ew+a2h7Ud5uKJyLrVuXttH/FuEPER7iIOrlMDkljw/xnLM1d4HixPoZ\r\n7ozQchpvJQs2XuLZBoAIVe1L7EW1qmSUuV1QcmL/iqI2MagNrn+qzP64m2on\r\nCNUaqQEfG7oadoSu+1aomrlduONAh6+qHzcdx7uxOCO8UFYu54RIMolgQMIu\r\nEE7AQrvh53VhvCw7+4NkZQUa8Zgx/LCYo04H2VpygolXRydg+Zxo+6wkc5GA\r\n4Vgg9ZLjQH3v2Ob/ziq6CWulhY6c3G34D5S6w/eeh3k7Lo8Nr3XgY0HZX2TT\r\nmuHKpS/IBQRUc7XHoXOHqpX0YH73/wNnZngZlwxeYqe7cX9/Sq79TuHBbROL\r\n9347VtNgpF/Ph6ctqy4MmBdUh2/yUlSm5V+zuAJ0XO0WZG4ClqYXqBHfs+R6\r\n2mLbtcpfQNcPTQXUQkdkn57q3rNywSn4ao9bkYtRXl2C/7CF0OqG+OY0n7YO\r\nik9ur6zZKcvNFHubylGsrfFlvWOVFUYO/TdC4JXsgiuN4ESq2hgEvyVLafcH\r\nqhTYUfwMc2VgpIwSvu6Mhq2012wru2rTfyI=\r\n=IyBT\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.2_1657669459962_0.07558133626545738"},"_hasShrinkwrap":false},"9.3.0-next.3":{"name":"@fluent-blocks/react","version":"9.3.0-next.3","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.3","@fluentui/react-components":"~9.0.1","@fluentui/react-tabster":"~9.0.1","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.3.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.0.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.3","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-aDMChxi3CZFYVviB0uoX8jOYMPxxe6pNO8cLxUBwKpBWR2nwqb6oI5lUe3WzQ9YsjbTm4u2qas31+R1eQA4LTQ==","shasum":"8a8656b0dee9fa2a462e7b50a99a1aa8ea993c4e","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.3.tgz","fileCount":424,"unpackedSize":802731,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDq/1XGckUyvUgMSqiu6P3i9HP/bepEUTej438olDT7oAiEA9ZZT634ewmRxO2rYNPmmW4Tk0J5uCkGAokMs1SfHU20="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiz1ksACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp9yg/+Ms+wiUJUVy1CA+R0FY1WQT4DumLx72uG6YRo7hntLV2Bgz/b\r\nkzQ8mNWK31x3m+nb4deUGQLa1FIZBEPStYE2UgFptGGnNKGNIcKe5dsO5Hsc\r\nDPZwZ+M2l9NGquhFloQ2QGFHjoCCsYiblz+ov3efqsCaDbJn8WJ2vd9qV+ug\r\nyghPfWINQbZa4Q7h2wsmC9BN6Tr20gYK2AC8Diwuuhwi6PjlT1OXK0cGV6pl\r\nR10pV2StQE8tV/wkmfUVQHGprIAEmeSm9hTKEMq79gyb/D0pCl5VIDuSxrZU\r\n39gLIDcfZ5/FE10yaSGwyxgkIE20Hna6ss3zf7hXhuRZFqmo7oNWc5KQO4QT\r\noxuas0zhj+DHfm1NYz0OQuFVKmPw/V12YsTB0QA6KZVCZfLbXF2PYkFp2Y/S\r\ns4SjdrSBfbdq6AIiJOU/0T1HoZOwQd9RoD0N1MSuwAXBQrmB382cfgidA6O4\r\nuJ5C6rMAlW0HEL525/qg1Wh+V2thDCB7DBBbcmupl2A9jylHTqqJcE0FtXa+\r\nSws6ANE/KTYl5ws/wek40aIcEhwR/hF0KWXUJdpQbXIP5XBntcDBlEfZZ+Ok\r\nfvyJBrKQDTxV/mpKOZfczM2Yj4YpN+OVS/LAs7vN9ExF4Ec0ZsoNn0bmkzU4\r\nrAobArKNAxwZ6TRejp7FBM9ZSmiUhnDZTkc=\r\n=5D95\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.3_1657755948457_0.11601121522364588"},"_hasShrinkwrap":false},"9.3.0-next.4":{"name":"@fluent-blocks/react","version":"9.3.0-next.4","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.3","@fluentui/react-components":"~9.0.1","@fluentui/react-tabster":"~9.0.1","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.4.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.0.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.4","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-ozpmJ42VQH9BWMZvQMz8SsoOhbNecrA7RVaoye3R/+SzD/YJ5dlz33+env6p0kf3d0ffrR3DT29bC9UXK7Xmtg==","shasum":"39b168fce9d60e9c7fa035dfc29925afde21b0ce","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.4.tgz","fileCount":424,"unpackedSize":803937,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDuyJ0sql9yn50gXDAwq03RBTnRr8woPbAWRL58QPrV3gIhAIbVNYZPxsH+ciLYwNGxd3gmkjkCdK9Yq2w/gwUHuPzP"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiz3IdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr6PBAAkuFwso2dkKboFUImzNgD5TjZLg/Ze8G3lGN9VBE1vbHuOy9O\r\nwO2vYXFckEVHl3yTUNDX9HRA2za9MSgtB53r0cAhbZwADoxR4gDhRqHOnYx7\r\nzKQcy0lVpQQGDj7KieEHS8aZ9a67vnJvO/Upakdvm4f4ztjHZZ5a/BvhucRu\r\nFSei/K6rTH1hBGHA383dOFEESs8i8JNjMO5iHbbL1B/QNkUbiv65M9wtBo2A\r\nB3/XzurUYb0fKnZ63NYZtarsypk+frFRzJkWUH6FMhlc3Hdra5RTttt+AtGo\r\nzon2/xvo8VVDPuOvJWu7HyKsnDH0zpun4F1zX8XASFC5G3zwAnURpluFMwfX\r\nHk3pvCWlM7xzYr+d4WwCsEB0HmUXlbJHbLONchpPyaxSY3RLLmzbyOi0VRH4\r\nWOh/o/X24IXVXiEZy+WGPlllujmurbZHUnddu3zGiRawkdz2kyIYCqVa4Nm1\r\nAxizRf6sJhCltZXK+OUZVyGuh+Ong8nQN7MA2sTvIRNHCV53pbCmjW9Bgfvr\r\nM5KyFLKHkDuq5T5AtpGMsV+jTRP3nSTmNL7GSBRSttKdIelgmPPMbUJAp7v4\r\napD0OQ9YPzNs0cSXx0NPCre1rzhVxvufRIU94bWyIHfUpxoUJQmB79rneVSN\r\nrLQYS2G6Gv1Pux82iqkn0kBcwTDIXRl0hrc=\r\n=dWuR\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.4_1657762333333_0.502259001223796"},"_hasShrinkwrap":false},"9.3.0-next.5":{"name":"@fluent-blocks/react","version":"9.3.0-next.5","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.3","@fluentui/react-components":"~9.0.1","@fluentui/react-tabster":"~9.0.1","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","fluentui:upgrade":"pnpm update @fluentui/react-components","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.5.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.0.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.5","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-gLzrPcnHX8xIGwUDNRdEwOWJpq/9eo+3UnSbVo+mnhfXGoQiZItZ+gfh/jcf0VBrJ70QLCrDkhz0kB1mJbwiww==","shasum":"a46f0c31eda2e831a5e9da7e705c7f057883e8cf","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.5.tgz","fileCount":424,"unpackedSize":803937,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyvLPQjAhvEW3913USeIxOx7SO6irCrhPiwVoT573tOAIhALajnTVlq4FFWsEcVPL2SJhrF55IFbLlzw+7MhIL3L38"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiz6QXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrdtA/9Gi1HybuKbHO2ZGAmK1r0hFBN6pLHfD8f6BZCVEq67d6n3aen\r\nfIMx8y4kANat6867bqDVctLdTkjlFQa7lNa5xiNyJUQzceTSUjspeZp5WoFT\r\ny+QVebr13PVmcdW5jBBZuUta6XO64wx4ge5AM3cRgm+h/0zvpNXBXTyo2wEA\r\ns0iVNBFkbIj44Sdrnn3QkSZp9M7SqUlSGpbNvUwNz0XhiNJA9xacsc8MFBNY\r\n24YxuL5nywUrYHt1K/rAQmhTUBDfT0yJVHexxnbkSm8eak4OCqIYduwKjkzo\r\nzZHHAcMiPMU9YxffPsX9jAveLb/jQVu52cCLABRnn9GclOvaFjgE0kg8JcUN\r\nI78n75d/QDIo2mLtVhmj8XQspkLP7oTVHPMEIIqWKeiY6oXmZGWACl9nmlpF\r\ndnc+F4td3XZY4bK9+GQxJb+Rcj37+msP6TamHD2CIR3QMH3gREt4FL2n8a/X\r\nqCAcZozZcHkSzAChIUZ5lwLghPtDmM0jwW0dDN0eo2efqxQFS+JgFnMEOY+6\r\nXBT4GoRTQZRSP5vCtGOAXzGpevlrXxCWL1XyqsDNPkNk+j9meYoN1oaLMFXd\r\noGYoum24TXprTdnM209xFGomUQiVRDQs6TRJ4d/rZC1I1tXVMuErTZA+kPyD\r\nAQPZkG7QyvzqIcvyeqYLxI73FwZTuBEl68E=\r\n=En2w\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.5_1657775127397_0.9316346959296826"},"_hasShrinkwrap":false},"9.3.0-next.6":{"name":"@fluent-blocks/react","version":"9.3.0-next.6","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.3","@fluentui/react-components":"~9.1.1","@fluentui/react-tabster":"~9.0.3","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.6.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.1.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.6","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-SWLmgHiVlrG0Vkx0AdP/0u/jharQ85TGjLtEL4OEcKXlwTi3GWBemiWAKSg+RHlbWuUGmYGJqSb3pfXL00fXIg==","shasum":"379a8faa184bbd09bfb6f1fe9ab5af4d4530f457","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.6.tgz","fileCount":424,"unpackedSize":804050,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAuEriGQguCzgHAMUYV7d3eRGk5+BM8s09CppZ473yhOAiA0qPjFVgfYHbcX0wVoZPCV8J4C93Bm/49CT4AxuTAIwA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi1dxaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmodXA//fs1ub0PwmiB3ZcvhxNJ5tIRawXMJw1Zv8H2ei6DUuWknGmWU\r\nG4T53Kws5YbrOnRO1WFWJmJDrXL9jNOwtwLpIDoAyJMe+l0sZXx0NciX9rV1\r\nu+20zs+eyNxP6GEHvhcnnGOIrVtbC157AhmeRsVSChjGC8SV6bKMymzjYO5H\r\nTDjb1G3RQJh9FXj3v8hSpDJLKSwBECZ8EC+f/YKWLnKQIQ99s7VergUTyXyk\r\nupnIHDeUu4cunoByjkprbWJ71ZBEvvNQnOxg16JZ1mgilNQgzjS3SEedcwDy\r\nLO7kPzSgXT+HaQ9M3rXd5lq8kB9lo9Qmd+lR9AWYkog4AiL1JvW7dp/atzag\r\nSqDW/oDgHX6CKVcK2ipNUv92iwQ85QZDulhi8U9eJHnTlLoufmkFApOq605M\r\nDCDo7Unx2KMNzEUMPaf2wcqGRiA4zIf4c39xIY8hoPH7GNa7V2J25M5DVUlS\r\nBHqq+V8pvif9SoGrPCDQ5hNPqdSo9aFm8alGhYLHA2LhR5URiUqbwliDAIdn\r\nvBmIdXQ04BD4DorwTQq1FhS4uGF99jWwLzb0pTruWLVyPYgHgNfywKomBbH1\r\n4OiYS7ZHzZbhkCK6CVideuf0tIL8ISnnq2zi/hobmkEDRVEQiu75QPnfk26C\r\n4RBLfAwZP+MMUKQxJ4Occg+25MkbhkOUBkc=\r\n=QJWX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.6_1658182746406_0.4885781403400049"},"_hasShrinkwrap":false},"9.3.0-next.7":{"name":"@fluent-blocks/react","version":"9.3.0-next.7","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.7","@fluentui/react-components":"~9.1.1","@fluentui/react-tabster":"~9.0.3","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.7.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.1.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.7","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-2Rtf9MVhko2PXA8+SAtGShaBZr7TNvKpOmfYP5AQstR6OkkUgpZ++8pgISMEcXFqX1SRqCuOZWGLNW1nM4gLcw==","shasum":"c4ab5e9fc037b057cf76c632bb67d84426b24d93","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.7.tgz","fileCount":424,"unpackedSize":804395,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB9F8o8HmRYNzVAec7hNpz5WrwnQ00oyZxfDMv5ESmz3AiEA6WTDD9iS+S3/eEMkrM1q6FCYWsYOkPKns7+B7mp2Q8A="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi1kLGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpVoQ//WMRXG+saBDplC8HcjQrlrYsukj8fBPkh8ArgzthtHXtJF9bY\r\nW36QDtjcpg+lREEO291vsL0SPM5iMIFwBL69Moj9O1xfGlAYKHBZpGg3nEtP\r\nWr7Z+sn40Rr2w2s/PDYg+uiRwvGl6wg9yfGZJTzCC3LurSBEIaiXODOxd8+H\r\nUBLhgpbA3NsiQHen8Kksdxuv01poMiRUTKXDnOiw5kWWc+oLQM/4Ue6N2TwE\r\nKW1KtxFxp+7zluEn6NZjD+X0JCyC455su1+6hqxuK5cvqKd0T4X+zSaGbW1d\r\nxedy6hj7KhJphkYcj51QWqSa8okQ85gAdotHhkP2C1/b4NWCX5Wk3CGkqlLM\r\nvksqoyj4bcwAnrOnf59EJwZd/JpnfMVtYVyYmqgn92QVZZHv71Rj4U9JS+j7\r\nkNDzStOLXc5YdyiQtrPhVF5ayVESsH87R9MDon4tJAQzznzeyVtz6u1zDmXF\r\nGuCs+D/KxAA+rwAvwXGPKSATKRA/fvgamHRxA+BwiFFbXGo2+uktzOBZuT+M\r\nOwi1coM0Wx2bTwXlqsrG2Q7LmUdV7BxD1Nu497289Ml1agufEN0ZK9tNldBb\r\nFi33esNWpRe4znKLQnyx496gtCKztGSAJHS4LXZFSWEoboods4HSSFUZTxrh\r\n4idGwODOivyhgKHJm8aSxZPt8KrNPl3o+5c=\r\n=BRsv\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.7_1658208966677_0.07505210871830581"},"_hasShrinkwrap":false},"9.3.0-next.8":{"name":"@fluent-blocks/react","version":"9.3.0-next.8","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.8","@fluentui/react-components":"~9.1.1","@fluentui/react-tabster":"~9.0.3","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.8.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.1.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.8","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-EzmW3WzSem6pOXR1RjSTUgvve/cUnMNuSamvykTQxFs9UaCzbnJPxJxBEadMZZslto7yT1VS8y6gLo6FuwoRQA==","shasum":"0631f93c6aa989bba1e76c1f570cfdd1231161ae","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.8.tgz","fileCount":424,"unpackedSize":804520,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICcFUNdJA0eUFDH0yfOGrqLD1DNqAtXKsdhxDgcHGOXXAiA01KO44cnJAZ0mpVOBQFufUV9sHvBeqV7y4IlfmM+JDw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi6xl5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmog3g/+IDFgWArmANg8iG8xmWKvP6IzYqzbXCS8lEiDG45wULd/E2Ve\r\njbI4xau64fILhisnSU0oq6mI3SGzicMmebOTWJFeFIDo3yJ9Yt+KPI0p/MT8\r\nx5h9eR6EQGW73R4dTGrfjXgKaTIjoonFCmuO/Mf0K6a25vdprKz17W0Up+nq\r\nYw2N28JTB8H8jbyHicwF4E/jHD5y3rrD9vo22Hj5v9NBuXxFxLtNeqdQH4xG\r\nIIX0BUUyBUSroYtw9xkbcKhJBOwhjmVHMQW5cmwg0vlrbEDJInBlg98D2Fuw\r\nR/pQiDeZ9oumm+pNBJwEVApUN/lMzwYoMbL1x5dpHRgm2JCJruCLcGgnYVD0\r\nFerQvbRxbEcbqfE/hf7rWIJP1jeU6eRkvbZgGuR750RzZ1zEznQtbdbeg3uO\r\nhNrQ6WE5c6KIDxDXhX5TipN+r50vzXbIw7hPiwow7cEQXjcJ2DNy+uxYUlFd\r\nn/NAyIMIyUUguYmwyNRO0ZM3LjXElzH+a45myYG4LbE5nNp1xnqiAEnjp+8Z\r\n4l/JJ590VxRq1/HQfmdbhtfmRBnZUvfhZvjW/zwCBlhfxscfJdEGX4Kfbcte\r\nB0Fu8c+Jn1zC0jkX3EvAebERWW2ftLWxuvRvlprIiaiylDbkPX1nz8swuDtn\r\n5DCpI99vTclxPbDTfsQtJTNk1SHlSAJ1UP8=\r\n=mZBs\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.8_1659574649005_0.06896810854966806"},"_hasShrinkwrap":false},"9.3.0-next.9":{"name":"@fluent-blocks/react","version":"9.3.0-next.9","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.9","@fluentui/react-components":"~9.1.1","@fluentui/react-tabster":"~9.0.3","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.9.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.1.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.9","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-LJqCEnSVwIrNwxeqa/e4fiC7JSpqr1zFcDqLhf4C3INN1aVuGt2EGWZDq99LuOJXhrFbUs1dwB1uClcCL6jdgw==","shasum":"c2fe39de3ef7f961aff78cef1def2e83820c2212","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.9.tgz","fileCount":432,"unpackedSize":814891,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEVFo6y35ZD6HMjcsOmjjuoaQZExKIluFCD05638wmQVAiEA98v/zAQZelSHRAuaoSbqsqfwWVlE1Kc/vdtYaE6rsuk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi9HnYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqxNA/8DOjIpIMHF80R4Qywx42v0D7K117XA14I2EYRvEeJO5x1FHe4\r\n3LIw6kaoYxAfRVHB06KelwHLMhxZ4YoC00jUURrfotQZ1w1+gVRdTZNgQZra\r\nn8w7hvL+iYi5HyKnMXk9o864V4ghXE+oojCquHXph01/ne3fGsf32cyKZwcj\r\nM98dyvAbbJ7gjx3b78SQmFzcsWyOXjl54W/6C1a3vW6QjM+UjDoovvMzh1UE\r\nWcy1pvKbliu/vtqRv4Go48L9JnWwgi4wdZMRd1Q/42N5OAMYmq9P2LfIWRNf\r\ng5sHMRjAqFhUdswLoJLC8ONJdqnbxMvKPQCyGOVibpV/etEmWY+52rs6PONE\r\n5oP5qZfUFbLx556RPHMqdcoy0r6WDul9NxWNsRqKuA9C/kAeFcZSWx0iQ7SF\r\ncf7Eqw7wWcU2Tz5WbdvepQeJj1mN3KcndjzztynxseHwwoQBGGyL9beucA3R\r\nfJ2XHcNfCxYdbfyxiK+i9B13y1VdSSWxPZElGhJq4tzO+c65bQ4pEAXQHtzI\r\nwb3iWZlPnZquPW6Zl03BhlRttWW1bdTJ6MLkKPhbnofCyyxFBT2op2Iu0qNK\r\nFEYYUf/NTprO1CgKpa40adpZzyvbYTFmzqUKIRq8tMrc/nnHJpbfze8lELDg\r\nw9bbPRPUSEM+lXdfzkVOrmeMlOoJr9B6EMo=\r\n=8g/Z\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.9_1660189144547_0.4745414199394533"},"_hasShrinkwrap":false},"9.3.0-next.10":{"name":"@fluent-blocks/react","version":"9.3.0-next.10","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.10","@fluentui/react-components":"~9.1.1","@fluentui/react-tabster":"~9.0.3","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.10.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.1.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.10","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-OxHVvP82YVpkhxnOAT9KMYrPtbSUHddJnDFlgVjELUVC7Y6fhl2/EbhWnQZByTkFjkA/5Vu4D3KV+J9na/47lQ==","shasum":"8dcfbf6b809c3b8a3a6b80b02ed6f44f920a32a0","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.10.tgz","fileCount":436,"unpackedSize":820608,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGLfPtliGDfMydmothc9eHF5Pdxzy7A/1+qGssMDSVTrAiEAgL9qPT4iT+DGe9/7hSKuJ2JWXMZDcAA1zl/l3pskZtg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi9aVCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrdxQ//aomrynmAWjxONCYpONxLFDEEQzVDCrvidQtqBKCYbWmqcuHS\r\n29mvxJN6QPhyWPisBYJ/cBcZUPBD/D3qYaNGrrKvQAGJw9Yi8UWkNqH00PGP\r\nzNY8mlbjvkMZSrh/9OKnPHT4cUMqGHq+NkzhwWswgHz9tNd7gSpUlRiUPeuA\r\n0lvuW9WUohqo3Yqybxjv3ZtCtsYsj46+Dq/JkmWKHeSHyBSLM4RHtQvrv+6S\r\nEVuyOgfNmHRsF9vTj+Xbc2yhBCbZbW3SFwG9joSd6c+fGBDdp5x0ORTgff+e\r\n7sVPVYb0ZiEJo5HywPwORaquftgo283jemyaJ/U0cKMHpduqoJku263lxPHh\r\njEtT/Y+YAG9wSDC7ArUUjGHfH9VeCLCXeMoyNgnMbLZoDeioQY69syx3RKKQ\r\nNBbja5s/oBQfZyHMPs3q7DvEeb9G80H8QQVYngDDLenjjK2sB93wBFbEtHJs\r\nmVgqgy85dQT2d/yRGB2G/Hn72+FaB8pR9TBZzFUAp15pIpcAx/YaunRv1XnQ\r\nOmG3pdEp7Yij2LBXIRBhrIAeKGOYMPZXCvt0oLgcRBKP/QlgD740tmuvROwU\r\nys9hFLVTrZ4elxzGvDdYyMsOb0LU7G9ghxVMUAMmflNiDxaqbtDd4c/3s/bA\r\nQlxzZAQkvlrvNrW7mQcrPnL/ZpEpw73c/1k=\r\n=2GDJ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.10_1660265794046_0.2503984944918325"},"_hasShrinkwrap":false},"9.3.0-next.11":{"name":"@fluent-blocks/react","version":"9.3.0-next.11","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.1.3","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.10","@fluentui/react-components":"~9.1.1","@fluentui/react-tabster":"~9.0.3","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.11.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.1.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.11","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-TFj5SD41yRVjWAPCR+K/S99Upf6MaC5T8QqlXgG0YWr83t6nyTvwXcGBXvLHDzkMi2CCrvwpK6Ft2vhw9zHbng==","shasum":"75c8c5c854161592abebfb61e02563112976ff22","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.11.tgz","fileCount":436,"unpackedSize":821304,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHYNHgAFeCBjMXkKsbTROU792DxxV45kPEEuo3f83DPcAiBB4AxS949WAA6thOgqfPuMV5P8l/F/7KiJVVqUaPTCxg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi9bvSACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoHCg//ZUiCy579InuxUDdpw4X07tKX+HKGjcOVJIaq0dGWIorc91cb\r\nw1GP0kCf8+sn/vgocPzcw/Rt1tUIUONxQ7QcdjN2CcrNrT86KZtjs5EZYlyM\r\niIWGcve+9xSJVAcVGlpip8qi/9r8fCEOJKSzcDserVOFRF8HHyMy1qIzD+sa\r\nhsRd3PNZkSdEdav7a57qZe4tq8r6iOfWKM4Jcf9dyB72//sFn6mhRwec1Vn7\r\nCzd18f0u3B4ewM+BZcTvMeh+K5W2eiMt5kMi1YYvrxYSbfWLlCZNqh1/p4HF\r\nDDGN010YA7rUwBor1HkpdqnaOHfLPCs+89VM9c/ukVoja5DtJsxbDIQC++wS\r\nom/gBBz+ZGaWN4/gR8C0wDvFxxyT2f3cfkW7o7Z7zNYqbcSHyORpg8yxwM6M\r\nsjScOZQ+X2Aqri6ciPJmLZyJ/oqvL2mULxOwM5xsX1t7wji24k3k6zPXF4m9\r\nAh/PECfPsm0YTIvEcXMO6TOLEe3fbSQTuASD/f6vHv6qiOtobZ3nh0DTXOUO\r\n+/B0skJSn5Vhp21vZrKI5qXUkEewCb/l8mDTj4vOwXHrpjFxP32ngbMB2Q4V\r\nX/3s1rfVNDbMEWX+unFrb0A4im24NBo+ZvLcWFvY5yIrU78FnzjEaD+3hpOk\r\nXb//Hym+ruHmO+IT2nlxYIZfdtL6phZC3qk=\r\n=YjQ6\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.11_1660271570168_0.44308810592636627"},"_hasShrinkwrap":false},"9.3.0-next.12":{"name":"@fluent-blocks/react","version":"9.3.0-next.12","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.2.0-next.0","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.10","@fluentui/react-components":"~9.1.1","@fluentui/react-tabster":"~9.0.3","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.12.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.1.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.12","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-wpEtnBWIbctbJeROuh9t8QwsSsGy0oaA5zJFtDZeATaIEtJnQ33Sb5LUC58JokXlzfr3yBx9DGjLtcjEX1jT7A==","shasum":"1ae6bf8b535f433be8ed285d5a8d7be3694d5c45","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.12.tgz","fileCount":436,"unpackedSize":821311,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdXFMVrkeZQaT3FPJQdE1AcR6Tp5GWXR74gH8q1dO2PwIhAJoxMN0fwtu+3gWXdhByDGUGaMrEtmP/olCm8ruJoG/5"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi+yyIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqTYg/8D2ElcsACgXl2lOtU+UHSe4i7ZnhlWbEiZQcJUVorMgMvNafG\r\nesLvwOrjr9/4jkLnxBlFYkQmNfocZinfF24Rq1Y98kb0lO5OYKj88mqnqOir\r\nJSawKu3mJAwIb/O9ytPyKVveqciGCmnLxyNl3hY2jwOLVeKtxYp5IozFDNUx\r\nUG9ifAAFBw4exjEKcxeLziQQvXW1dQiIQQqdEtXTjOBInVHxAFmwtxcrGZkz\r\nf+v7N5p0XiPx2WMUhiulyABMWTNrD9i8N1aOPteEIIc9KNEB71LbS2TVE7q6\r\ntE4jOdvZV5luHJH+xyWdYSnKq2RiDWtKA1B3BAt95uifcTcjB/TbsAfyngJc\r\nQntjT41fNPpcg2IwfkKQTs+dKk8yltpDFVRD7rVbJvwyK9oDpcCeTP3AiO1o\r\n5brWrxjkMbpYnM6EB26438hXD0Dgz+EjLHzGEIDqaJlTT8ZXuGN7ihAzvaly\r\npiliAgA7SvKGS2yP6mJ8ndQ0XCWy/dtWhuc8TUo7Xf6QQCsrCu6F+8HW85tp\r\nTvQgv45LCYv/gShZTdfQSDA7YJA4W8AyX6gYx0gebnslw6nnNDDttCFrIEBx\r\naBRvoN6h6+Di2CeqBLD2S4y5RQnogYgzEtiRuhYObWSLkUtUSiIeu442HQia\r\nJ103Upzo6gC8oTuqsrYUfZZVgajpMbl++5E=\r\n=NGYI\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.12_1660628104062_0.6547536193101156"},"_hasShrinkwrap":false},"9.3.0-next.13":{"name":"@fluent-blocks/react","version":"9.3.0-next.13","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.2.0-next.0","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.10","@fluentui/react-components":"~9.1.1","@fluentui/react-tabster":"~9.0.3","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.13.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.1.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.13","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-mzgqG2BKXEgSc3QR+U7q1tdFytRrYGG7gs8Gfos1l2TW3HY9ybQxndzzugv3CZnLE3MoYgTFSpT8TKtwEY5fbA==","shasum":"82ed6044619013e0a0a2f3a64742f1dd4025be10","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.13.tgz","fileCount":436,"unpackedSize":826092,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICbuDwSs/joZWMzc7LRQ2i4WD4ONkGhShV42/WfEa+WWAiEAxdlNcCCh/G9o16XStMSPcXhbSqMTwBApUGb1m8CRrws="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjBRiTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrXgQ/+KX1QuZikJ9Yt0Kfhm568YQqRGJivBu9pkb8AwowKczpFZ4F+\r\njAqvDlZAYn5uLklzYWDLhb+BGAQTqezFo91rjDw1PU8wCgGrh+ycyqmQ7NyO\r\noFv3EjpXhZOad/Y3y8xxeal2G1NTIDXljbvRkPIgcdrtrG+E0ZMfQw87hXJJ\r\nr8KouUEa33/XDu4VfRbqiFJssSrBuDguBqyn/BKQ3q0Tlsy7EtrR/eTdnSvc\r\nz4WGMee0IhUGSMHZ2kwGRDpneNjeYAwhaiHKh5zmENIf4B36gS5CBsT2VHUE\r\nqldGS7MaNBpzcEuGeiHPw8NU26L3Yca/4nonZD7ZwCMrkYFLyS6wchyof9Q9\r\nHuj70xykVuUykD+0KvsfXSkP4q9KIWsQOGDZ5SYkNlz+YrfHjgDpstGLBI4Y\r\nB0+FixQ0ef+5AegVL0ewIDgr+116wlYTBaZGLyPtYSz7A5n76Z0kx0HZ5UnD\r\nddZVcnwyoVzD5JUXQyAvA3F4yS146UEAA/v6KrBNRUvK0tZqZV1qHQhwM87o\r\n/AOYduE9pUICsid15g9QBGSD+Amx2VwRy8sIVR9wYCujVnGlWpoCNvFP5kXB\r\njPTHXD+kR48gNMiFiS6ajZ7eEEXMLF0ZpchftjwslYrBYOzILim7+AsNIlMj\r\nmcj/FJknpXQ/ZvYmKyjCBiF2ogyTtdDA/eE=\r\n=QnFM\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.13_1661278354792_0.621017898096891"},"_hasShrinkwrap":false},"9.3.0-next.14":{"name":"@fluent-blocks/react","version":"9.3.0-next.14","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.9","@storybook/addon-essentials":"^6.5.9","@storybook/addon-links":"^6.5.9","@storybook/addons":"^6.5.9","@storybook/react":"^6.5.9","@storybook/theming":"^6.5.9","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.2.0-next.0","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.10","@fluentui/react-components":"~9.2.0","@fluentui/react-tabster":"~9.1.0","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.14.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.1.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.14","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-mwPbILE2KoiyQYFh7ybslSGKqWgG/+aTPgGBUID6vBXXsp8/AnvX49iFryqibXEWUk2O/eBVmUnlHWKSLEWz7w==","shasum":"553bbb5f50018f657f69c6cde1212f023820cf98","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.14.tgz","fileCount":436,"unpackedSize":827558,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGMKIg7qPlDLO2/lJ3JFFmFVYl8kiywnMRyR8VQlsVe0AiEAoWJqOtvjBKKxy/X27yt2UEu66cv+A9TRxuELf5/ONgY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjBXFuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr0Sg//TlLI1nMy+fy6cZVOTZwgVRxawNE3BBzBMT3NRDkNzYZY8+8k\r\n/r4b05EUlMT+oiml7AfBj87GxqdND6svlcy79Kf/c9EJhoJvdpR2UGwCfL1+\r\ncRWA0dKx0UMjkia4OzCEPue/c+YmSQY4OADMVknjsAFGbFdZKbIfbGDfI1hC\r\nOb/gZY1y9URzd90w5tvS1G5bFwPPFDus/dj4BpgITjvEEunJ6fDPXykI4F8P\r\n+1RNQhhqNz01fNweGK0wndiVtQyZ3dvfVQ84p/1cgm0kNJQTeOKGfr1l/XKz\r\noB8nHsJill1mruGoQSorqxRCQ2Ci/MAgNofGlY8wW6pftixH2jYB6abPPflJ\r\nH5FUy6urBZ54IM1kz3kmnqK3GIJjGY5UVqyXDz7U4vC1V0sooKssAstb9Gz+\r\n1LwsNbk1KA5cZu572kiiUfg5Ch0i50JElApkntqoamQPBnrlulmt/TUnTGq6\r\nOjarElC6kvR/NHvXXpUj9QOtnC8n8Bp+OMn+8BRXm206alIrsHiUHKvAVZMj\r\n8E71RmP2BysEgZjn/WYZ0JAy5Ap070o/9DoHSlqOs5faXpkxHOh5LVD31Apk\r\nz6Znr4HCuutDb4d6npOsRnq/KuEWGLRhvEdQpxB7wo20/1kjUgqpSqpYXBHg\r\nXJSAirOyDJjDVN/g1GS4G+dxBPtgkgMDjOg=\r\n=vK+N\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.14_1661301102680_0.9935110663987572"},"_hasShrinkwrap":false},"9.3.0-next.15":{"name":"@fluent-blocks/react","version":"9.3.0-next.15","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.10","@storybook/addon-essentials":"^6.5.10","@storybook/addon-links":"^6.5.10","@storybook/addons":"^6.5.10","@storybook/react":"^6.5.10","@storybook/theming":"^6.5.10","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.2.0-next.0","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.15","@fluentui/react-components":"~9.2.0","@fluentui/react-tabster":"~9.1.0","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.15.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.1.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.15","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-iAWp0IQRNbrZN3jOIQHVNj90K2oohMydX6mB96efr2cLkhpwZ7TLI50CjEXVGqctQID8+yiVAqK96rElDFJ0Qw==","shasum":"d119a9aa6d4843a7c06465c53a7196232df7a22d","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.15.tgz","fileCount":436,"unpackedSize":827930,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAPagqHpSXqA6PbYnVvNu9VoRMXYuQWZ+uJeQJiD1bjsAiADmZHFD5FH6ru4Umdfy1Jjg4IuvYp2WtFba9b1dF6eWw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjESkRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqw+g/+K3bxIC3C+F1GLS5WiNUFZ6PptWkVNceMZqNFq775e8KjhwtA\r\n9u815OZz/ussBfbLfu7n1C7OUscIKmgCj2PTrwv9nkxYZ8j61jM+le8REk1a\r\noqEBIlkQRGWS7xT5e31g13SOHGRUzKYmdsdXhl65l6EAu1pQ614r4h3c5Hw+\r\n7alTH/PvLKMcbRjAQU2VqmAnRIl8ZlBatU/WWRsy91jobduSoxpmtRnL32nD\r\nJudcGN0fiTq2vSACHR7jC3a5b/wqW/CjCqqVcR14DDDf8xMwNCC0gsg9J7hJ\r\np6LRzvmrwSY8u4PhRfgDlFCRycMQ+0kAGFafyTa++FFvAG6DzayB32QZ6uJD\r\nekI4ECpJrichpamEf/87P7yStuWjWnu5BQUOtgFnVwhQB0BBGCdRLpjbCBLI\r\nJnpmTxeeY/PIt9KiAt6wAUkLf3D/m8jqYkVvKzRQDJO5ccP6f/gpFs908tns\r\nLBmG/8IgOkw4Et8rXOHkP4WdqWZmujss4qNrAMeOw+e94jnCw4Y1K7yX10QL\r\ncEv/zADmu6zFkmkIrL6yu93ctp7GtDTHsnDU6GxxaXTKSedBq/QaaviVtlsv\r\nygmbCHtpnq9yQGlXOmugTEH/Tw0Y8ZH+5J6pEU00ungzeZ5EgHUinc2HUsfu\r\nXP8IiGKqikF7xVzalkskzlyXpALyoyScCRY=\r\n=oY16\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.15_1662069009013_0.5718692923926305"},"_hasShrinkwrap":false},"9.3.0-next.16":{"name":"@fluent-blocks/react","version":"9.3.0-next.16","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.10","@storybook/addon-essentials":"^6.5.10","@storybook/addon-links":"^6.5.10","@storybook/addons":"^6.5.10","@storybook/react":"^6.5.10","@storybook/theming":"^6.5.10","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.2.0-next.0","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.16","@fluentui/react-components":"~9.2.0","@fluentui/react-tabster":"~9.1.0","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.16.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.1.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.16","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-G4Hh2axGYcPr6cRBrvONj6MrhSUvt7NCRMxQq2sRJN6IzFY2ONue/t0nreSgiJagUcvdcPraKH/wKT7Q+tG2jA==","shasum":"72ebfbf180b77511073483fe80f4f5b88a2c00d5","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.16.tgz","fileCount":436,"unpackedSize":827976,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF1Ic3qA+e1/IZQRloiNV5kDzlLF9Dbz2FZ0hwx1kjGUAiEAuG8nZ3dcuGkuRtDxN3y7TdjnhlB6yRoYy/2f/0deGvk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjITwOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrwZQ//a8DkBHPE/1Tu0oe+AHJF9rjo/5pdM9kQqbd4uH0Rlzsr8LIh\r\nI5+udercfcjs83swYGZ5+TGoT07OlfcDIofr5tl+VfS49GC0CZhEkmjFW257\r\n2fl41UWyTEMYzA+L5boUZjgMIAQtbJS5H972OJtNmTS9nDEuxFW1XtxnJ0D9\r\nkfgEiJ2arKX/EGnD6ROMQtzG8Q6khz30x7U60lWpZT1f974QGskt1pHrVarX\r\nYOtmjvEP4WZ//3/Zs7dovDo5t8+JK+DHtz1iWwuvrnjrkBO4PsYpx3E2q0Gg\r\nwUrg9xuFU1xJH4N13X0OvxyNxHsCxF8VAll4wlC9HIjs0DzVyo+0Vijst98Z\r\nswjC7A2rFE0BOUq6afunO3/hUivR6WnbI58pBrKcxwquH7VKPHfDsUKzPYGy\r\nAvkJ5txpi35LU5RVz7lM+EODb6EZgbicKZ9NIyNGga9Dp5ljBEkakhuDodLL\r\nyQflktojGkpxqBKHgUeuCUv2za3z3/YIvM5Gc91v2IiqLoH9A/ImCboqTDPN\r\nLnfXa6XmZKQ5HmA7aunFErLf3kSrI/TPPHX8vFT5x/lkDr3qtM/n6lt7ck+p\r\npcBJXbWXi1cgopTRmbkQ2hKlO/2vRF9wjpVsUXhW+dSnND+OMMl4YhpNjN84\r\naM6MjH1xuJE7oI2Ov8gidAkvaLNa8gAe+z4=\r\n=xZ3n\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.16_1663122446047_0.4727970504425274"},"_hasShrinkwrap":false},"9.3.0-next.17":{"name":"@fluent-blocks/react","version":"9.3.0-next.17","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.10","@storybook/addon-essentials":"^6.5.10","@storybook/addon-links":"^6.5.10","@storybook/addons":"^6.5.10","@storybook/react":"^6.5.10","@storybook/theming":"^6.5.10","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.2.0-next.0","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.17","@fluentui/react-components":"~9.2.0","@fluentui/react-tabster":"~9.1.0","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.17.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.1.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.17","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-jzZMP7dk68E/SDL5hkmDyw0TnDyhyuN31FNDIbTtsglWMr+73DgiBhvxTL1hVO3QEp8Bf2xNnOGdEasTS8TJ/w==","shasum":"6fcfb614dd1d2b15eeb7a02dfed588044af72e1c","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.17.tgz","fileCount":436,"unpackedSize":828302,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7fU9pT93pMTU6MIXNtS3aRqxXuA9LssgzkUpdAu/uhQIhAM9y+JlH1WznsfGu+w90zQpczJgcl9T07JVvPFnCwnDG"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjIkpRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpILg/8DOjo3hP35E2rRbbJQ+/gbBvYiWyQEaDMuVxm6ixuwTToukrB\r\ntb4zbr1YA+yTCna2TTqRmx/03sQ4FqLj1LwcDn1LMkqXyKmeoEyEVKa/m+Lh\r\nSI8K3abx3PHi9JBXK57jrbpAPW8m8owVQcRw6KgGjYS9RO4AjQfLVTGpK7GX\r\nZFRqGUIn2NlkfKG5akCZZoqVk+aCtgQBN716lo9cZjQ0Dav96TMdFvYqPa8k\r\nuISEJCC4gjlAQ1cmTnVOW/zOIXAKJuEOCQUJBqbWqiflAtsjNOs4smjNPbwU\r\nKk05y1VXyyV+TfOvrFwh1at1bj1AiEiYF1csWOgTLtQ+rtjQNaSzBf2z/fgb\r\n8GHBiHtEyNI2BrURbWTw8vUP2jGF/f3NaHKI7ArOyluIvgYRSW6igm6ags++\r\nL9RAd4KsyUkNxGnVtUUHLHGK7vq92IPy2Oo+2bHgtyOH0ChpaWJ+0cEjCoWG\r\ncVqz69B6f5n1wYa/7p6kHPc/P0/oS+VCttrFvba5KkGPok99nlZskCZP6Pxh\r\nAnE4hXKzNvXCUlzIZcWfvmhBcTu2iXuvze5XRlhKQ0j9DzykcHRMO7PysLWx\r\nygdV1x+CKITNjd9Eege6CROh9aja2v4mVkLYcN0w+DqgXHdEp1kNtBxxzTvU\r\nDtfCHxv6pVUBlnkQRZpOj/DaYtzdpVlCl/8=\r\n=oeM8\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.17_1663191633531_0.4703117408320845"},"_hasShrinkwrap":false},"9.3.0-next.18":{"name":"@fluent-blocks/react","version":"9.3.0-next.18","repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"authors":["Will Shown <willshown@microsoft.com>","Zhenya Savchenko <zhenyasa@microsoft.com>"],"license":"MIT","main":"cjs/index.js","engines":{"node":">=12.0.0 <17.0.0","pnpm":"^7"},"peerDependencies":{"chart.js":"^2.9.4","react":"^16.14.0, 17.x, 18.x","react-dom":"^16.14.0, 17.x, 18.x"},"devDependencies":{"@babel/core":"latest","@faker-js/faker":"^7.3.0","@playwright/test":"latest","@storybook/addon-actions":"^6.5.10","@storybook/addon-essentials":"^6.5.10","@storybook/addon-links":"^6.5.10","@storybook/addons":"^6.5.10","@storybook/react":"^6.5.10","@storybook/theming":"^6.5.10","@types/chart.js":"^2.9.37","@types/lodash":"latest","@types/mocha":"latest","@types/node":"^17.0.35","@types/react":"18.x","@types/react-dom":"18.x","@types/react-test-renderer":"latest","babel-loader":"latest","chart.js":"^2.9.4","chromatic":"latest","csstype":"^2.6.20","http-proxy-middleware":"latest","just-scripts":"latest","mocha":"latest","playwright-chromium":"latest","react":"18.x","react-dom":"18.x","react-test-renderer":"latest","start-server-and-test":"latest","ts-mocha":"latest","ts-node":"latest","typescript":">=4.4.0 <5.0.0","webpack":"latest"},"dependencies":{"@fluent-blocks/basic-icons":"9.2.0-next.0","@fluent-blocks/colors":"9.2.0","@fluent-blocks/schemas":"9.3.0-next.17","@fluentui/react-components":"~9.2.0","@fluentui/react-tabster":"~9.1.0","@react-hook/resize-observer":"^1.2.5","alea":"^1.0.1","lodash":"^4.17.21"},"scripts":{"build":"just-scripts build","storybook:upgrade":"pnpm update \"@storybook/*\"","storybook:build":"cd ../icons && pnpm bundle && cd .. && cp icons/basic-icons.svg react/.storybook/public/basic-icons.svg && cd react && build-storybook","storybook:start":"start-storybook -p 4000","storybook:start-ci":"start-storybook -p 4000 --ci --quiet","dev":"pnpm storybook:start","test":"start-server-and-test 'pnpm storybook:start-ci' http://localhost:4000 'pnpm test:run'","test:run":"ts-mocha -p ./tsconfig.test.json --require src/setup.test.ts src/**/*.test.tsx","check":"tsc --noEmit"},"module":"esm/index.js","types":"types/index.d.ts","_resolved":"","_integrity":"","_from":"file:fluent-blocks-react-9.3.0-next.18.tgz","readme":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" />\n<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImageDark.svg#gh-dark-mode-only\" width=\"320\" />\n\n### [Open Storybook ↗︎][storybook]\n\nFluent Blocks is a React implementation of [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs for app development based on [`@fluentui/react-components`][fluentui-v9]. This project succeeds [`@fluentui/react-teams`][react-teams].\n\nThis package provides a set of components developers can use to build fully interactive & accessible experiences using whatever React coding convention they prefer, rendering experiences that match Fluent & UI Kit designs.\n\n## ⚠️ Not yet recommended for production\n\nThis project is still being vetted. If you want to use Fluent Blocks, please bear in mind even non-prereleases don’t yet come with any particular guarantees.\n\nFor the best experience specify a specific version of Fluent Blocks when installing instead of using `~`/`^`/`*`, tags, or ranges. If you encounter issues or when you want to use new features, migrate to a newer version with care.\n\n## Getting help & contributing\n\nIf you encounter issues, have questions, or want to participate, please don’t hesitate to [write an issue on Github][issues]. You can also [join us on Teams in our community channel][channel].\n\nIf you’d like to run the development environment or contribute to this project, please see [the Contributing file](CONTRIBUTING.md).\n\n## Getting started\n\nUsing TypeScript and an IDE that supports type inspections will make using this project much easier!\n\n1. Add `react@17`, `react-dom@17` if they’re not in your project already\n    - Versions of React from `^16.14.0` up to `18` are supported, in case your project already uses a version in that range\n3. Depending on your bundler you may need to add `chart.js@^2.9.4`, which you’ll need anyway if you want to use charts from this package\n5. Install this package and the icons sprite **with `--save-exact`** using your package manager:\n   - NPM: `npm install --save --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - Yarn: `yarn add --exact @fluent-blocks/react @fluent-blocks/basic-icons`\n   - PNPM: `pnpm add --save-exact @fluent-blocks/react @fluent-blocks/basic-icons`\n\nFluent Blocks comes with `@fluentui/react-components@~9.1.1` as a dependency — if you anticipate wanting to use components from that library in your project alongside Fluent Blocks, you should also add it as a direct dependency.\n\nNow anywhere you can use React, you can use Fluent Blocks. If you want to delegate the entire viewport to Fluent Blocks, use the `View` component on its own:\n\n```tsx\nimport { View, Escape } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <View accentScheme='teams' iconSpriteUrl={basicIcons} main={{\n    title: 'Hello, world.',\n    blocks: [\n      {\n        message: {\n          title: 'Let’s do this thing…',\n          variant: 'big',\n          media: {illustration: 'hello', label: 'Hello'},\n          viewportHeight: false,\n          actions: {\n            primary: <Escape contentMeetsAccessibilityAndDesignStandards>\n              <span>…for real this time.</span>\n            </Escape>,\n            secondary: {\n              actionId: 'start',\n              label: 'Get started',\n              icon: 'arrow_right',\n              iconPosition: 'after'\n            }\n          }\n        }\n      },\n    ],\n  }}/>,\n  document.getElementById('root')\n)\n```\n\nIf you want to use Fluent Blocks’ intermediary components, wrap where any will render in a single `FluentBlocksProvider` (there only needs to be one on the page):\n\n```tsx\nimport { FluentBlocksProvider, Illustration } from '@fluent-blocks/react';\nimport basicIcons from '@fluent-blocks/basic-icons/basic-icons.svg';\nimport { render } from 'react-dom'\n\nrender(\n  <FluentBlocksProvider iconSpriteUrl={basicIcons}>\n    <Illustration illustration='hello' label='Hello'/>\n  </FluentBlocksProvider>,\n  document.getElementById('root')\n)\n```\n\nIn order to get the right background coverage and overflow behavior, you should apply `height: 100%` and `overflow: hidden` to the Fluent Blocks React root, and any parents of the Fluent Blocks React root should occupy the full height of whatever space Fluent Blocks should occupy.\n\nIf Fluent Blocks will render alone on the page, these rules are sufficient:\n\n```css\nhtml, body, #root {\n  height: 100%;\n}\n#root {\n    overflow: hidden;\n}\n```\n\n## How design pattern usage is validated through types\n\nSince the goal of this library is to aid in implementing experiences that conform to [Fluent][figma-fluent] & [UI Kit][figma-uikit] designs and principles, it brings with it those design systems’ opinions. Each component has a concept for what kind of properties & content it accepts, which can be provided in one of two ways:\n\n1. As serializeable **props**, e.g. `{icon: 'fluent', size: 24}`\n1. As a JSX **element**, e.g. `<Icon icon='fluent' size={24}/>`\n\nThe bolded terms are used in the TypeScript types for the components in this project, e.g. a valid icon instance matches `IconPropsOrElement`, which is either 1) `IconProps`, or 2) `IconElement`.\n\nFor consistency between the two syntaxes, the `children` prop and its implicit nesting equivalent in JSX is avoided in favor of named content props that parallel the serializeable syntax.\n\nSome top-level components like `View` will check the props it was provided and provide a detailed error if the props are incorrect in any way. All other components won’t check for issues and will simply refuse to render unexpected content. In either case, developers can explicitly mark where exceptions should be made using the `Escape` component described below.\n\n## Escaping validation\n\nThese components won’t render a component that has unexpected props or content, unless you use `Escape`. If you feel the need to use a pattern not provided by this project, you can do so using the `Escape` component as a JSX element in any of a component’s content props that aren’t “tightly-bound”, e.g.:\n\n```tsx\n// Only Escape imported from this package will render,\n// so make sure you’ve imported it:\nimport { Section, Escape } from '@fluentui/react-blocks';\n\n<Section\n  title={[\n    <Escape contentMeetsAccessibilityAndDesignStandards key=\"t1\">\n      <strong>You can put anything here</strong>\n      <span> and it will be rendered.</span>\n    </Escape>,\n  ]}\n/>\n```\n\n### Exceptions: tightly bound components\n\nA component may ignore `Escape` only if it is “tightly-bound” with another component. Components are tightly-bound when they make sense only when used together, e.g. `Layout` and `LayoutItem` where `Layout` will only render `LayoutItems` in its `items` prop. If you need to render special content in such a situation, you can either replace the entire parent with `Escape`, or use `Escape` as the _content_ of one of the children.\n\n### Escape inclusively, and share your designs!\n\nMake sure the content you add using `Escape` conforms to [WCAG 2.1][wcag] and is designed inclusively.\n\nIf you would like to share your pattern with the community, [we’d welcome your contribution](CONTRIBUTING.md)! We’d all thank you to submit PR’s that extend this project with your accessible high-quality patterns.\n\n## Concepts\n\nThis library harmonizes the patterns in Fluent and the UI Kit with concepts from web layout & interactivity by delivering components organized into these categories:\n\n- General components based on [formatting context][fmtctx]:\n    - `Block` vs `Inline`\n- Specialized clusters of components with shared interactivity considerations:\n    - **Media**, e.g.:\n        - `Illustration`\n        - `Chart`\n    - **Inputs**, e.g.:\n        - `RadioGroup`\n        - `ShortTextInput`\n- **Surfaces**, each of which expect to be unique in a given view\n- **Views**, the top-level components which render an entire UI in a viewport\n\nAny component may also have **Exemplars**, which render the same component but with a specialized API surface optimized for a specific use-case for the pattern, e.g. `Widget` always renders a `Card` though its props are based on the more constrained scope of content for cards in a dashboard from the UI Kit.\n\n## Icons\n\nThis project supports using icons from [`fluentui-system-icons`][fluent-icons] through `@fluent-blocks/basic-icons`.\n\nFirst, give Fluent Blocks’ Provider or View a URL to where your project serves the SVG sprite included in `@fluent-blocks/basic-icons`:\n\n```tsx\nimport {View} from '@fluent-blocks/react'\n\nconst iconSpriteUrl = require('@fluent-blocks/basic-icons/basic-icons.svg')\n\nreturn <View iconSpriteUrl={iconSpriteUrl}  \n  {/* etc */}\n/>\n```\n\nThe `Icon`/`{icon: …}` component will render an SVG of the appropriate size containing a `use` element with an `href` to the appropriate sprite, e.g.:\n\n```tsx\n// If used wherever `InlineSequence` or `IconPropsOrElement` is accepted,\n// both the props syntax and element syntax will be rendered the same way.\nconst catIcon =\n  { icon: 'animal_cat', size: 24, variant: 'outline' } ||\n  <Icon icon='animal_cat' size={24} variant='outline'/>\n```\n\nIn your own project, we recommend serving just the sprites you need locally if possible. Do not use proxies for icons in production.\n\n[channel]: https://teams.microsoft.com/l/team/19%3atKKC3lewTMtk4IopGy7Seq7fok-lNW7lGEK-HmzfaKY1%40thread.tacv2/conversations?groupId=4f925ae9-c713-434b-a1f6-44b58ac57210&tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47\n[issues]: https://github.com/OfficeDev/fluent-blocks/issues\n[figma-fluent]: https://www.figma.com/community/file/836828295772957889/Microsoft-Fluent-Web\n[figma-uikit]: https://www.figma.com/community/file/916836509871353159/Microsoft-Teams-UI-Kit\n[fluent-icons]: https://github.com/microsoft/fluentui-system-icons\n[fluentui-v9]: https://www.npmjs.com/package/@fluentui/react-components\n[react-teams]: https://www.npmjs.com/package/@fluentui/react-teams\n[storybook]: https://aka.ms/fluent-blocks-storybook\n[wcag]: https://www.w3.org/TR/WCAG21\n[fmtctx]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flow_Layout/Block_and_Inline_Layout_in_Normal_Flow\n","readmeFilename":"README.md","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"},"homepage":"https://github.com/OfficeDev/fluent-blocks#readme","_id":"@fluent-blocks/react@9.3.0-next.18","_nodeVersion":"14.20.0","_npmVersion":"6.14.17","dist":{"integrity":"sha512-1wK7J9tpre4c/231wlJOXF1bR1a/deFaG5R8IXKk2hihdkvfwuWnLpZpWuNzE3EAue8lF6jyjpGOlnuspZrJzQ==","shasum":"deb6dc4b66c1c4f7400043c4a68e2c3f78955e11","tarball":"https://registry.npmjs.org/@fluent-blocks/react/-/react-9.3.0-next.18.tgz","fileCount":436,"unpackedSize":829649,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGVfUm1d6V2uxPZqezdc8YIeIheNcfSjoFGnOuoiPuKNAiEA1Yke3sObPA9T2bdOHpxWn7cxY7qOmRtM3CPwsr/N3OQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjImnuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp/7g//cEXX7Ya5dLop5Z2NIrArTQWsGwThUt1a/34ow5Gmv6oZQbVF\r\nxTFqCrgeAoddYlNXvVWOWXOiEwCoym1TlJcO3VmutgJDnMZ92btbw0pSovE5\r\nB3P37pl7eBDFg0L7buXWDFxbMXO22Uf1GHxZJQzmsPa+Zn6zfuysmTcRyeCK\r\nacJ2DSac3FYmrd7egJ9awrLCupPGu15+BDg1eqEW+WuGPJ/gwEa2uWH6Yj85\r\nrEPcjlzqOyC3ffPBn2z/kWf9KDt95G5Te3rXHKlDSz2JDt1rhNG82skDPLhM\r\n10TTn3ibotEFNQG+lOB/+ip/lf1HWSlmSBygrkG2aw0mFXhurfoLQYpSIJ7H\r\nxhxGI/1LQZiEohEKcHb1wyq7D5+edA8+39gxm6HaB1u8ICRUCrd93NLh2Th3\r\nYQ97FeusiMpD7DXF2p/seOD9hjw3VuDeqExid3ypuughmxDabBhYeoHKSs9i\r\nqgLP7/hwmTphfKfNCSfdO8EvP0v7TAUqwwZce38W7dwJbS820z7svfWYk/y2\r\nZp5L6Mbfi0dZN4kMgK9Qm5ftV3RfQOTj0ir+6Fpmasv8BOWfb4yjQI/eHNoN\r\nv+nixk/Ia5KbhTjAd/Px7gNISriSNlZIftfHF/NH3Q52xJwUIFCT/GFI2J0n\r\nA/6A0iqSS6vOr96lIkZDa/jFLzIXBIKWeuc=\r\n=tqkY\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"msdstwg","email":"willshown@microsoft.com"},"directories":{},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react_9.3.0-next.18_1663199726327_0.465371551787954"},"_hasShrinkwrap":false}},"time":{"created":"2022-03-22T21:32:38.349Z","9.0.0-alpha.1":"2022-03-22T21:32:38.587Z","modified":"2022-09-14T23:55:26.596Z","9.0.0-alpha.2":"2022-03-23T22:46:23.938Z","9.0.0-alpha.3":"2022-03-24T00:01:40.611Z","9.0.0-alpha.4":"2022-03-24T00:17:02.146Z","9.0.0-alpha.5":"2022-03-24T01:33:48.906Z","9.0.0-alpha.6":"2022-03-24T05:17:51.052Z","9.0.0-alpha.7":"2022-03-24T07:05:23.009Z","9.0.0":"2022-04-20T20:49:51.065Z","9.1.0-next.1":"2022-04-20T21:44:47.068Z","9.1.0-next.2":"2022-04-26T06:46:54.475Z","9.1.0-next.3":"2022-05-04T21:08:46.141Z","9.1.0-next.4":"2022-05-10T05:34:07.227Z","9.1.0":"2022-05-10T07:45:34.694Z","9.1.1":"2022-05-10T18:02:41.426Z","9.1.2":"2022-05-10T18:24:34.699Z","9.1.3":"2022-05-10T19:47:25.731Z","9.2.0-next.0":"2022-06-15T21:20:40.776Z","9.2.0-next.1":"2022-06-17T20:11:43.397Z","9.2.0-next.2":"2022-06-21T23:39:00.726Z","9.2.0-next.3":"2022-06-23T07:17:23.207Z","9.2.0-next.4":"2022-06-29T07:57:01.761Z","9.2.0-next.5":"2022-06-29T08:48:45.543Z","9.2.0-next.6":"2022-07-02T22:49:21.136Z","9.2.0-next.7":"2022-07-03T00:44:44.634Z","9.2.0-next.8":"2022-07-04T21:15:42.636Z","9.2.0-next.9":"2022-07-07T07:44:28.530Z","9.2.0":"2022-07-07T23:01:29.641Z","9.3.0-next.0":"2022-07-08T20:16:44.736Z","9.3.0-next.1":"2022-07-09T01:42:19.336Z","9.3.0-next.2":"2022-07-12T23:44:20.137Z","9.3.0-next.3":"2022-07-13T23:45:48.717Z","9.3.0-next.4":"2022-07-14T01:32:13.535Z","9.3.0-next.5":"2022-07-14T05:05:27.581Z","9.3.0-next.6":"2022-07-18T22:19:06.791Z","9.3.0-next.7":"2022-07-19T05:36:06.832Z","9.3.0-next.8":"2022-08-04T00:57:29.277Z","9.3.0-next.9":"2022-08-11T03:39:04.787Z","9.3.0-next.10":"2022-08-12T00:56:34.298Z","9.3.0-next.11":"2022-08-12T02:32:50.365Z","9.3.0-next.12":"2022-08-16T05:35:04.471Z","9.3.0-next.13":"2022-08-23T18:12:35.100Z","9.3.0-next.14":"2022-08-24T00:31:42.867Z","9.3.0-next.15":"2022-09-01T21:50:09.263Z","9.3.0-next.16":"2022-09-14T02:27:26.305Z","9.3.0-next.17":"2022-09-14T21:40:33.809Z","9.3.0-next.18":"2022-09-14T23:55:26.506Z"},"maintainers":[{"name":"msdstwg","email":"willshown@microsoft.com"},{"name":"thure","email":"npm@willshown.com"}],"repository":{"type":"git","url":"git+ssh://git@github.com/OfficeDev/fluent-blocks.git"},"license":"MIT","readme":"","readmeFilename":"","description":"<img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-blocks@next/packages/react/.storybook/public/brandImage.svg#gh-light-mode-only\" width=\"320\" /> <img alt=\"Fluent Blocks logo\" src=\"https://cdn.jsdelivr.net/gh/OfficeDev/fluent-","homepage":"https://github.com/OfficeDev/fluent-blocks#readme","bugs":{"url":"https://github.com/OfficeDev/fluent-blocks/issues"}}