From da882f44f251e7bb80fb969cbe268a942a2df74e Mon Sep 17 00:00:00 2001 From: Anush Gupta <74965306+Anush2303@users.noreply.github.com> Date: Thu, 19 Dec 2024 14:41:00 +0530 Subject: [PATCH 01/24] Security: Ensure type safety of dependent fields (#33486) --- ...-f56dc096-9891-4d5c-ae30-4d8a6ac5b481.json | 7 +++ .../DeclarativeChart/DeclarativeChart.tsx | 2 +- .../DeclarativeChart/PlotlySchemaAdapter.ts | 56 +++++++++---------- 3 files changed, 36 insertions(+), 29 deletions(-) create mode 100644 change/@fluentui-react-charting-f56dc096-9891-4d5c-ae30-4d8a6ac5b481.json diff --git a/change/@fluentui-react-charting-f56dc096-9891-4d5c-ae30-4d8a6ac5b481.json b/change/@fluentui-react-charting-f56dc096-9891-4d5c-ae30-4d8a6ac5b481.json new file mode 100644 index 0000000000000..5a9fd5dcb3232 --- /dev/null +++ b/change/@fluentui-react-charting-f56dc096-9891-4d5c-ae30-4d8a6ac5b481.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Ensure type safety of dependent fields", + "packageName": "@fluentui/react-charting", + "email": "74965306+Anush2303@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/packages/charts/react-charting/src/components/DeclarativeChart/DeclarativeChart.tsx b/packages/charts/react-charting/src/components/DeclarativeChart/DeclarativeChart.tsx index c8f199b72fb03..c75490160da75 100644 --- a/packages/charts/react-charting/src/components/DeclarativeChart/DeclarativeChart.tsx +++ b/packages/charts/react-charting/src/components/DeclarativeChart/DeclarativeChart.tsx @@ -141,7 +141,7 @@ export const DeclarativeChart: React.FunctionComponent = { - const legend = series.name || `Series ${index + 1}`; - const color = getColor(legend, colorMap, isDarkTheme); + const legend: string = series.name || `Series ${index + 1}`; + const color: string = getColor(legend, colorMap, isDarkTheme); let y = bucket.length; if (series.histnorm === 'percent') { @@ -256,7 +256,7 @@ export const transformPlotlyJsonToVBCProps = ( return { data: vbcData, - chartTitle: layout?.title, + chartTitle: typeof layout?.title === 'string' ? layout?.title : '', // width: layout?.width, // height: layout?.height, hideLegend: true, @@ -278,7 +278,7 @@ export const transformPlotlyJsonToScatterChartProps = ( const isString = typeof xValues[0] === 'string'; const isXDate = isDateArray(xValues); const isXNumber = isNumberArray(xValues); - const legend = series.name || `Series ${index + 1}`; + const legend: string = series.name || `Series ${index + 1}`; const lineColor = getColor(legend, colorMap, isDarkTheme); return { @@ -292,7 +292,7 @@ export const transformPlotlyJsonToScatterChartProps = ( }); const chartProps: IChartProps = { - chartTitle: layout.title || '', + chartTitle: typeof layout.title === 'string' ? layout.title : '', lineChartData: chartData, }; @@ -330,10 +330,10 @@ export const transformPlotlyJsonToHorizontalBarWithAxisProps = ( }) .flat(); - const chartHeight = layout.height || 450; - const margin = layout.margin?.l || 0; - const padding = layout.margin?.pad || 0; - const availableHeight = chartHeight - margin - padding; + const chartHeight: number = typeof layout.height === 'number' ? layout.height : 450; + const margin: number = typeof layout.margin?.l === 'number' ? layout.margin?.l : 0; + const padding: number = typeof layout.margin?.pad === 'number' ? layout.margin?.pad : 0; + const availableHeight: number = chartHeight - margin - padding; const numberOfBars = data[0].y.length; const scalingFactor = 0.01; const gapFactor = 1 / (1 + scalingFactor * numberOfBars); @@ -341,13 +341,13 @@ export const transformPlotlyJsonToHorizontalBarWithAxisProps = ( return { data: chartData, - chartTitle: layout.title || '', + chartTitle: typeof layout.title === 'string' ? layout.title : '', barHeight, showYAxisLables: true, styles: { root: { height: chartHeight, - width: layout.width || 600, + width: typeof layout.width === 'number' ? layout.width : 600, }, }, }; @@ -375,7 +375,7 @@ export const transformPlotlyJsonToHeatmapProps = (jsonObj: any): IHeatMapChartPr }); }); const heatmapData: IHeatMapChartData = { - legend: firstData.name || '', + legend: typeof firstData.name === 'string' ? firstData.name : '', data: heatmapDataPoints, value: 0, }; @@ -429,17 +429,17 @@ export const transformPlotlyJsonToSankeyProps = ( }), }; - const width: number = layout?.width || 440; - const height: number = layout?.height || 220; + const width: number = typeof layout?.width === 'number' ? layout?.width : 440; + const height: number = typeof layout?.height === 'number' ? layout?.height : 220; const styles: ISankeyChartProps['styles'] = { root: { - fontSize: layout.font?.size, + ...(typeof layout.font?.size === 'number' ? { fontSize: layout.font?.size } : {}), }, }; const shouldResize: number = width + height; return { data: { - chartTitle: layout?.title, + chartTitle: typeof layout?.title === 'string' ? layout?.title : '', SankeyChartData: sankeyChartData, }, width, @@ -491,15 +491,15 @@ export const transformPlotlyJsonToGaugeProps = ( return { segments, - chartValue: firstData.value, - chartTitle: firstData.title?.text, + chartValue: typeof firstData.value === 'number' ? firstData.value : 0, + chartTitle: typeof firstData.title?.text === 'string' ? firstData.title?.text : '', sublabel, // range values can be null - minValue: firstData.gauge?.axis?.range?.[0] ?? undefined, - maxValue: firstData.gauge?.axis?.range?.[1] ?? undefined, + minValue: typeof firstData.gauge?.axis?.range?.[0] === 'number' ? firstData.gauge?.axis?.range?.[0] : undefined, + maxValue: typeof firstData.gauge?.axis?.range?.[1] === 'number' ? firstData.gauge?.axis?.range?.[1] : undefined, chartValueFormat: () => firstData.value, - width: layout?.width, - height: layout?.height, + width: typeof layout?.width === 'number' ? layout?.width : 0, + height: typeof layout?.height === 'number' ? layout?.height : 0, hideLegend: true, styles, }; From f2523077e9c92fc7f065308efe2081fc86846b5b Mon Sep 17 00:00:00 2001 From: ling1726 Date: Thu, 19 Dec 2024 15:04:13 +0100 Subject: [PATCH 02/24] fix: MessageBar auto reflow should handle document reflow with `min-content` (#33409) --- ...-a4bb3869-7b64-45f3-9084-cfbbca1c8a1c.json | 7 + .../components/MessageBar/MessageBar.test.tsx | 10 ++ .../MessageBar/useMessageBarReflow.ts | 133 +++++++++--------- 3 files changed, 84 insertions(+), 66 deletions(-) create mode 100644 change/@fluentui-react-message-bar-a4bb3869-7b64-45f3-9084-cfbbca1c8a1c.json diff --git a/change/@fluentui-react-message-bar-a4bb3869-7b64-45f3-9084-cfbbca1c8a1c.json b/change/@fluentui-react-message-bar-a4bb3869-7b64-45f3-9084-cfbbca1c8a1c.json new file mode 100644 index 0000000000000..2cc7d9dc06210 --- /dev/null +++ b/change/@fluentui-react-message-bar-a4bb3869-7b64-45f3-9084-cfbbca1c8a1c.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "fix: MessageBar auto reflow should handle document reflow with `min-content`", + "packageName": "@fluentui/react-message-bar", + "email": "lingfangao@hotmail.com", + "dependentChangeType": "patch" +} diff --git a/packages/react-components/react-message-bar/library/src/components/MessageBar/MessageBar.test.tsx b/packages/react-components/react-message-bar/library/src/components/MessageBar/MessageBar.test.tsx index 2881a0b1a2f54..056dce8a52bfd 100644 --- a/packages/react-components/react-message-bar/library/src/components/MessageBar/MessageBar.test.tsx +++ b/packages/react-components/react-message-bar/library/src/components/MessageBar/MessageBar.test.tsx @@ -23,6 +23,16 @@ describe('MessageBar', () => { // do nothing } }; + + // @ts-expect-error https://github.com/jsdom/jsdom/issues/2032 + global.IntersectionObserver = class IntersectionObserver { + public observe() { + // do nothing + } + public disconnect() { + // do nothing + } + }; }); beforeEach(() => { diff --git a/packages/react-components/react-message-bar/library/src/components/MessageBar/useMessageBarReflow.ts b/packages/react-components/react-message-bar/library/src/components/MessageBar/useMessageBarReflow.ts index d8a18037f6dfb..8bbb0ae01843b 100644 --- a/packages/react-components/react-message-bar/library/src/components/MessageBar/useMessageBarReflow.ts +++ b/packages/react-components/react-message-bar/library/src/components/MessageBar/useMessageBarReflow.ts @@ -1,91 +1,92 @@ import * as React from 'react'; import { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts'; -import { isHTMLElement } from '@fluentui/react-utilities'; +import { useIsomorphicLayoutEffect } from '@fluentui/react-utilities'; export function useMessageBarReflow(enabled: boolean = false) { const { targetDocument } = useFluent(); - const forceUpdate = React.useReducer(() => ({}), {})[1]; - const reflowingRef = React.useRef(false); - // TODO: exclude types from this lint rule: https://github.com/microsoft/fluentui/issues/31286 - - const resizeObserverRef = React.useRef(null); const prevInlineSizeRef = React.useRef(-1); + const messageBarRef = React.useRef(null); - const handleResize: ResizeObserverCallback = React.useCallback( - entries => { - // Resize observer is only owned by this component - one resize observer entry expected - // No need to support multiple fragments - one border box entry expected - if (process.env.NODE_ENV !== 'production' && entries.length > 1) { - // eslint-disable-next-line no-console - console.error( - [ - 'useMessageBarReflow: Resize observer should only have one entry. ', - 'If multiple entries are observed, the first entry will be used.', - 'This is a bug, please report it to the Fluent UI team.', - ].join(' '), - ); - } + const [reflowing, setReflowing] = React.useState(false); - const entry = entries[0]; - // `borderBoxSize` is not supported before Chrome 84, Firefox 92, nor Safari 15.4 - const inlineSize = entry?.borderBoxSize?.[0]?.inlineSize ?? entry?.target.getBoundingClientRect().width; + // This layout effect 'sanity checks' what observers have done + // since DOM has not been flushed when observers run + useIsomorphicLayoutEffect(() => { + if (!messageBarRef.current) { + return; + } - if (inlineSize === undefined || !entry) { - return; + setReflowing(prevReflowing => { + if (!prevReflowing && messageBarRef.current && isReflowing(messageBarRef.current)) { + return true; } - const { target } = entry; + return prevReflowing; + }); + }, [reflowing]); - if (!isHTMLElement(target)) { - return; - } + const handleResize: ResizeObserverCallback = React.useCallback(() => { + if (!messageBarRef.current) { + return; + } - let nextReflowing: boolean | undefined; - - // No easy way to really determine when the single line layout will fit - // Just keep try to set single line layout as long as the size is growing - // Will cause flickering when size is being adjusted gradually (i.e. drag) - but this should not be a common case - if (reflowingRef.current) { - if (prevInlineSizeRef.current < inlineSize) { - nextReflowing = false; - } - } else { - const scrollWidth = target.scrollWidth; - if (inlineSize < scrollWidth) { - nextReflowing = true; - } - } + const inlineSize = messageBarRef.current.getBoundingClientRect().width; + const scrollWidth = messageBarRef.current.scrollWidth; - prevInlineSizeRef.current = inlineSize; - if (typeof nextReflowing !== 'undefined' && reflowingRef.current !== nextReflowing) { - reflowingRef.current = nextReflowing; - forceUpdate(); - } - }, - [forceUpdate], - ); + const expanding = prevInlineSizeRef.current < inlineSize; + const overflowing = inlineSize < scrollWidth; + + setReflowing(!expanding || overflowing); + }, []); + + const handleIntersection: IntersectionObserverCallback = React.useCallback(entries => { + if (entries[0].intersectionRatio < 1) { + setReflowing(true); + } + }, []); + + const ref = React.useMemo(() => { + let resizeObserver: ResizeObserver | null = null; + let intersectionObserer: IntersectionObserver | null = null; - const ref = React.useCallback( - (el: HTMLElement | null) => { + return (el: HTMLElement | null) => { if (!enabled || !el || !targetDocument?.defaultView) { + resizeObserver?.disconnect(); + intersectionObserer?.disconnect(); return; } - resizeObserverRef.current?.disconnect(); + messageBarRef.current = el; const win = targetDocument.defaultView; - const resizeObserver = new win.ResizeObserver(handleResize); - resizeObserverRef.current = resizeObserver; - resizeObserver.observe(el, { box: 'border-box' }); - }, - [targetDocument, handleResize, enabled], - ); + resizeObserver = new win.ResizeObserver(handleResize); + intersectionObserer = new win.IntersectionObserver(handleIntersection, { threshold: 1 }); - React.useEffect(() => { - return () => { - resizeObserverRef.current?.disconnect(); + intersectionObserer.observe(el); + resizeObserver.observe(el, { box: 'border-box' }); }; - }, []); + }, [handleResize, handleIntersection, enabled, targetDocument]); - return { ref, reflowing: reflowingRef.current }; + return { ref, reflowing }; } + +const isReflowing = (el: HTMLElement) => { + return el.scrollWidth > el.offsetWidth || !isFullyInViewport(el); +}; + +const isFullyInViewport = (el: HTMLElement) => { + const rect = el.getBoundingClientRect(); + const doc = el.ownerDocument; + const win = doc.defaultView; + + if (!win) { + return true; + } + + return ( + rect.top >= 0 && + rect.left >= 0 && + rect.bottom <= (win.innerHeight || doc.documentElement.clientHeight) && + rect.right <= (win.innerWidth || doc.documentElement.clientWidth) + ); +}; From 6b775123cced3ca0f58ce8a5779c6df2474f6bff Mon Sep 17 00:00:00 2001 From: Fluent UI Build Date: Thu, 19 Dec 2024 14:31:14 +0000 Subject: [PATCH 03/24] release: applying package updates - react-components --- ...-bar-a4bb3869-7b64-45f3-9084-cfbbca1c8a1c.json | 7 ------- .../react-components/CHANGELOG.json | 15 +++++++++++++++ .../react-components/CHANGELOG.md | 12 +++++++++++- .../react-components/package.json | 4 ++-- .../react-message-bar/library/CHANGELOG.json | 15 +++++++++++++++ .../react-message-bar/library/CHANGELOG.md | 11 ++++++++++- .../react-message-bar/library/package.json | 2 +- .../react-migration-v0-v9/library/CHANGELOG.json | 15 +++++++++++++++ .../react-migration-v0-v9/library/CHANGELOG.md | 11 ++++++++++- .../react-migration-v0-v9/library/package.json | 4 ++-- .../react-migration-v8-v9/library/CHANGELOG.json | 15 +++++++++++++++ .../react-migration-v8-v9/library/CHANGELOG.md | 11 ++++++++++- .../react-migration-v8-v9/library/package.json | 4 ++-- .../react-portal-compat/CHANGELOG.json | 15 +++++++++++++++ .../react-portal-compat/CHANGELOG.md | 11 ++++++++++- .../react-portal-compat/package.json | 4 ++-- .../react-timepicker-compat/library/package.json | 2 +- .../react-components/theme-designer/package.json | 2 +- 18 files changed, 137 insertions(+), 23 deletions(-) delete mode 100644 change/@fluentui-react-message-bar-a4bb3869-7b64-45f3-9084-cfbbca1c8a1c.json diff --git a/change/@fluentui-react-message-bar-a4bb3869-7b64-45f3-9084-cfbbca1c8a1c.json b/change/@fluentui-react-message-bar-a4bb3869-7b64-45f3-9084-cfbbca1c8a1c.json deleted file mode 100644 index 2cc7d9dc06210..0000000000000 --- a/change/@fluentui-react-message-bar-a4bb3869-7b64-45f3-9084-cfbbca1c8a1c.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "patch", - "comment": "fix: MessageBar auto reflow should handle document reflow with `min-content`", - "packageName": "@fluentui/react-message-bar", - "email": "lingfangao@hotmail.com", - "dependentChangeType": "patch" -} diff --git a/packages/react-components/react-components/CHANGELOG.json b/packages/react-components/react-components/CHANGELOG.json index 62cabe937aa29..d41c76fea81a7 100644 --- a/packages/react-components/react-components/CHANGELOG.json +++ b/packages/react-components/react-components/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-components", "entries": [ + { + "date": "Thu, 19 Dec 2024 14:30:56 GMT", + "tag": "@fluentui/react-components_v9.56.8", + "version": "9.56.8", + "comments": { + "patch": [ + { + "author": "lingfangao@hotmail.com", + "package": "@fluentui/react-message-bar", + "commit": "f2523077e9c92fc7f065308efe2081fc86846b5b", + "comment": "fix: MessageBar auto reflow should handle document reflow with `min-content`" + } + ] + } + }, { "date": "Wed, 18 Dec 2024 10:59:36 GMT", "tag": "@fluentui/react-components_v9.56.7", diff --git a/packages/react-components/react-components/CHANGELOG.md b/packages/react-components/react-components/CHANGELOG.md index c54b6eb9a2144..0d568f05c23fa 100644 --- a/packages/react-components/react-components/CHANGELOG.md +++ b/packages/react-components/react-components/CHANGELOG.md @@ -1,9 +1,19 @@ # Change Log - @fluentui/react-components -This log was last generated on Wed, 18 Dec 2024 10:59:36 GMT and should not be manually modified. +This log was last generated on Thu, 19 Dec 2024 14:30:56 GMT and should not be manually modified. +## [9.56.8](https://github.com/microsoft/fluentui/tree/@fluentui/react-components_v9.56.8) + +Thu, 19 Dec 2024 14:30:56 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-components_v9.56.7..@fluentui/react-components_v9.56.8) + +### Patches + +- `@fluentui/react-message-bar` + - fix: MessageBar auto reflow should handle document reflow with `min-content` ([PR #33409](https://github.com/microsoft/fluentui/pull/33409) by lingfangao@hotmail.com) + ## [9.56.7](https://github.com/microsoft/fluentui/tree/@fluentui/react-components_v9.56.7) Wed, 18 Dec 2024 10:59:36 GMT diff --git a/packages/react-components/react-components/package.json b/packages/react-components/react-components/package.json index 1a57651aa4516..bce0970ab1155 100644 --- a/packages/react-components/react-components/package.json +++ b/packages/react-components/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-components", - "version": "9.56.7", + "version": "9.56.8", "description": "Suite package for converged React components", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -66,7 +66,7 @@ "@fluentui/react-tree": "^9.8.11", "@griffel/react": "^1.5.22", "@swc/helpers": "^0.5.1", - "@fluentui/react-message-bar": "^9.2.18", + "@fluentui/react-message-bar": "^9.2.19", "@fluentui/react-breadcrumb": "^9.0.47", "@fluentui/react-aria": "^9.13.12", "@fluentui/react-rating": "^9.0.26", diff --git a/packages/react-components/react-message-bar/library/CHANGELOG.json b/packages/react-components/react-message-bar/library/CHANGELOG.json index 7af96ca5b028a..76cb7b3b7d04a 100644 --- a/packages/react-components/react-message-bar/library/CHANGELOG.json +++ b/packages/react-components/react-message-bar/library/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-message-bar", "entries": [ + { + "date": "Thu, 19 Dec 2024 14:30:56 GMT", + "tag": "@fluentui/react-message-bar_v9.2.19", + "version": "9.2.19", + "comments": { + "patch": [ + { + "author": "lingfangao@hotmail.com", + "package": "@fluentui/react-message-bar", + "commit": "f2523077e9c92fc7f065308efe2081fc86846b5b", + "comment": "fix: MessageBar auto reflow should handle document reflow with `min-content`" + } + ] + } + }, { "date": "Mon, 16 Dec 2024 16:26:49 GMT", "tag": "@fluentui/react-message-bar_v9.2.18", diff --git a/packages/react-components/react-message-bar/library/CHANGELOG.md b/packages/react-components/react-message-bar/library/CHANGELOG.md index a5ade09fda185..47343bfcb13b6 100644 --- a/packages/react-components/react-message-bar/library/CHANGELOG.md +++ b/packages/react-components/react-message-bar/library/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-message-bar -This log was last generated on Mon, 16 Dec 2024 16:26:49 GMT and should not be manually modified. +This log was last generated on Thu, 19 Dec 2024 14:30:56 GMT and should not be manually modified. +## [9.2.19](https://github.com/microsoft/fluentui/tree/@fluentui/react-message-bar_v9.2.19) + +Thu, 19 Dec 2024 14:30:56 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-message-bar_v9.2.18..@fluentui/react-message-bar_v9.2.19) + +### Patches + +- fix: MessageBar auto reflow should handle document reflow with `min-content` ([PR #33409](https://github.com/microsoft/fluentui/pull/33409) by lingfangao@hotmail.com) + ## [9.2.18](https://github.com/microsoft/fluentui/tree/@fluentui/react-message-bar_v9.2.18) Mon, 16 Dec 2024 16:26:49 GMT diff --git a/packages/react-components/react-message-bar/library/package.json b/packages/react-components/react-message-bar/library/package.json index 3f5b05fb9c153..f290113045fe5 100644 --- a/packages/react-components/react-message-bar/library/package.json +++ b/packages/react-components/react-message-bar/library/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-message-bar", - "version": "9.2.18", + "version": "9.2.19", "description": "Fluent UI MessageBar component", "main": "lib-commonjs/index.js", "module": "lib/index.js", diff --git a/packages/react-components/react-migration-v0-v9/library/CHANGELOG.json b/packages/react-components/react-migration-v0-v9/library/CHANGELOG.json index a2dc43d9f290b..192dbf6cdb230 100644 --- a/packages/react-components/react-migration-v0-v9/library/CHANGELOG.json +++ b/packages/react-components/react-migration-v0-v9/library/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-migration-v0-v9", "entries": [ + { + "date": "Thu, 19 Dec 2024 14:30:56 GMT", + "tag": "@fluentui/react-migration-v0-v9_v9.2.25", + "version": "9.2.25", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-migration-v0-v9", + "comment": "Bump @fluentui/react-components to v9.56.8", + "commit": "f2523077e9c92fc7f065308efe2081fc86846b5b" + } + ] + } + }, { "date": "Wed, 18 Dec 2024 10:59:37 GMT", "tag": "@fluentui/react-migration-v0-v9_v9.2.24", diff --git a/packages/react-components/react-migration-v0-v9/library/CHANGELOG.md b/packages/react-components/react-migration-v0-v9/library/CHANGELOG.md index 07aeab2fbd235..45990059abacf 100644 --- a/packages/react-components/react-migration-v0-v9/library/CHANGELOG.md +++ b/packages/react-components/react-migration-v0-v9/library/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-migration-v0-v9 -This log was last generated on Wed, 18 Dec 2024 10:59:37 GMT and should not be manually modified. +This log was last generated on Thu, 19 Dec 2024 14:30:56 GMT and should not be manually modified. +## [9.2.25](https://github.com/microsoft/fluentui/tree/@fluentui/react-migration-v0-v9_v9.2.25) + +Thu, 19 Dec 2024 14:30:56 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-migration-v0-v9_v9.2.24..@fluentui/react-migration-v0-v9_v9.2.25) + +### Patches + +- Bump @fluentui/react-components to v9.56.8 ([PR #33409](https://github.com/microsoft/fluentui/pull/33409) by beachball) + ## [9.2.24](https://github.com/microsoft/fluentui/tree/@fluentui/react-migration-v0-v9_v9.2.24) Wed, 18 Dec 2024 10:59:37 GMT diff --git a/packages/react-components/react-migration-v0-v9/library/package.json b/packages/react-components/react-migration-v0-v9/library/package.json index 05776bc1b4edc..1a9f2e4164c5a 100644 --- a/packages/react-components/react-migration-v0-v9/library/package.json +++ b/packages/react-components/react-migration-v0-v9/library/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-migration-v0-v9", - "version": "9.2.24", + "version": "9.2.25", "description": "Migration shim components and methods for hybrid v0/v9 applications building on Fluent UI React.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -21,7 +21,7 @@ }, "dependencies": { "@fluentui/react-aria": "^9.13.12", - "@fluentui/react-components": "^9.56.7", + "@fluentui/react-components": "^9.56.8", "@fluentui/react-context-selector": "^9.1.71", "@fluentui/react-icons": "^2.0.245", "@fluentui/react-jsx-runtime": "^9.0.48", diff --git a/packages/react-components/react-migration-v8-v9/library/CHANGELOG.json b/packages/react-components/react-migration-v8-v9/library/CHANGELOG.json index 92821ecf3ead3..9e0442e918717 100644 --- a/packages/react-components/react-migration-v8-v9/library/CHANGELOG.json +++ b/packages/react-components/react-migration-v8-v9/library/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-migration-v8-v9", "entries": [ + { + "date": "Thu, 19 Dec 2024 14:30:56 GMT", + "tag": "@fluentui/react-migration-v8-v9_v9.6.44", + "version": "9.6.44", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-migration-v8-v9", + "comment": "Bump @fluentui/react-components to v9.56.8", + "commit": "f2523077e9c92fc7f065308efe2081fc86846b5b" + } + ] + } + }, { "date": "Wed, 18 Dec 2024 10:59:37 GMT", "tag": "@fluentui/react-migration-v8-v9_v9.6.43", diff --git a/packages/react-components/react-migration-v8-v9/library/CHANGELOG.md b/packages/react-components/react-migration-v8-v9/library/CHANGELOG.md index c2377d3ca7685..d3764f2a61d43 100644 --- a/packages/react-components/react-migration-v8-v9/library/CHANGELOG.md +++ b/packages/react-components/react-migration-v8-v9/library/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-migration-v8-v9 -This log was last generated on Wed, 18 Dec 2024 10:59:37 GMT and should not be manually modified. +This log was last generated on Thu, 19 Dec 2024 14:30:56 GMT and should not be manually modified. +## [9.6.44](https://github.com/microsoft/fluentui/tree/@fluentui/react-migration-v8-v9_v9.6.44) + +Thu, 19 Dec 2024 14:30:56 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-migration-v8-v9_v9.6.43..@fluentui/react-migration-v8-v9_v9.6.44) + +### Patches + +- Bump @fluentui/react-components to v9.56.8 ([PR #33409](https://github.com/microsoft/fluentui/pull/33409) by beachball) + ## [9.6.43](https://github.com/microsoft/fluentui/tree/@fluentui/react-migration-v8-v9_v9.6.43) Wed, 18 Dec 2024 10:59:37 GMT diff --git a/packages/react-components/react-migration-v8-v9/library/package.json b/packages/react-components/react-migration-v8-v9/library/package.json index 358eb4a893d51..05702c7ce4348 100644 --- a/packages/react-components/react-migration-v8-v9/library/package.json +++ b/packages/react-components/react-migration-v8-v9/library/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-migration-v8-v9", - "version": "9.6.43", + "version": "9.6.44", "description": "Migration shim components and methods for hybrid v8/v9 applications building on Fluent UI React.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -21,7 +21,7 @@ "@ctrl/tinycolor": "3.3.4", "@fluentui/fluent2-theme": "^8.107.118", "@fluentui/react": "^8.122.1", - "@fluentui/react-components": "^9.56.7", + "@fluentui/react-components": "^9.56.8", "@fluentui/react-icons": "^2.0.245", "@fluentui/react-hooks": "^8.8.16", "@griffel/react": "^1.5.22", diff --git a/packages/react-components/react-portal-compat/CHANGELOG.json b/packages/react-components/react-portal-compat/CHANGELOG.json index 288104b2d0402..2a97f72c72d31 100644 --- a/packages/react-components/react-portal-compat/CHANGELOG.json +++ b/packages/react-components/react-portal-compat/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-portal-compat", "entries": [ + { + "date": "Thu, 19 Dec 2024 14:30:56 GMT", + "tag": "@fluentui/react-portal-compat_v9.0.176", + "version": "9.0.176", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-portal-compat", + "comment": "Bump @fluentui/react-components to v9.56.8", + "commit": "f2523077e9c92fc7f065308efe2081fc86846b5b" + } + ] + } + }, { "date": "Wed, 18 Dec 2024 10:59:37 GMT", "tag": "@fluentui/react-portal-compat_v9.0.175", diff --git a/packages/react-components/react-portal-compat/CHANGELOG.md b/packages/react-components/react-portal-compat/CHANGELOG.md index 9e541f2a01e3e..24aec79e8fa1b 100644 --- a/packages/react-components/react-portal-compat/CHANGELOG.md +++ b/packages/react-components/react-portal-compat/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-portal-compat -This log was last generated on Wed, 18 Dec 2024 10:59:37 GMT and should not be manually modified. +This log was last generated on Thu, 19 Dec 2024 14:30:56 GMT and should not be manually modified. +## [9.0.176](https://github.com/microsoft/fluentui/tree/@fluentui/react-portal-compat_v9.0.176) + +Thu, 19 Dec 2024 14:30:56 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-portal-compat_v9.0.175..@fluentui/react-portal-compat_v9.0.176) + +### Patches + +- Bump @fluentui/react-components to v9.56.8 ([PR #33409](https://github.com/microsoft/fluentui/pull/33409) by beachball) + ## [9.0.175](https://github.com/microsoft/fluentui/tree/@fluentui/react-portal-compat_v9.0.175) Wed, 18 Dec 2024 10:59:37 GMT diff --git a/packages/react-components/react-portal-compat/package.json b/packages/react-components/react-portal-compat/package.json index 3eaec090a9746..907063c27bb59 100644 --- a/packages/react-components/react-portal-compat/package.json +++ b/packages/react-components/react-portal-compat/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-portal-compat", - "version": "9.0.175", + "version": "9.0.176", "description": "A package that contains compatibility layer for React Portals", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -27,7 +27,7 @@ "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@fluentui/react-components": "^9.56.7", + "@fluentui/react-components": "^9.56.8", "@types/react": ">=16.14.0 <19.0.0", "react": ">=16.14.0 <19.0.0" }, diff --git a/packages/react-components/react-timepicker-compat/library/package.json b/packages/react-components/react-timepicker-compat/library/package.json index a2d65f02399a8..0eca335dda8f2 100644 --- a/packages/react-components/react-timepicker-compat/library/package.json +++ b/packages/react-components/react-timepicker-compat/library/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-timepicker-compat", - "version": "0.2.44", + "version": "0.2.45", "description": "Fluent UI TimePicker Compat Component", "main": "lib-commonjs/index.js", "module": "lib/index.js", diff --git a/packages/react-components/theme-designer/package.json b/packages/react-components/theme-designer/package.json index 31317e4cc70cb..74899a1d5bcf9 100644 --- a/packages/react-components/theme-designer/package.json +++ b/packages/react-components/theme-designer/package.json @@ -17,7 +17,7 @@ "@fluentui/scripts-api-extractor": "*" }, "dependencies": { - "@fluentui/react-components": "^9.56.7", + "@fluentui/react-components": "^9.56.8", "@fluentui/react-context-selector": "^9.1.71", "@fluentui/react-icons": "^2.0.245", "@fluentui/react-storybook-addon-export-to-sandbox": "^0.1.0", From 00fada2af3a290e83ba3812ab3440b5ae8a903cf Mon Sep 17 00:00:00 2001 From: Victor Genaev Date: Thu, 19 Dec 2024 19:40:08 +0100 Subject: [PATCH 04/24] chore: migrate to ts 5.3.3 (#33235) --- ...-1bdbe475-2d17-453e-b058-b152322278cd.json | 7 +++ package.json | 7 ++- packages/react/etc/react.api.md | 44 +++++++++---------- .../ContextualMenu/ContextualMenu.base.tsx | 2 +- yarn.lock | 37 ++++++++++++---- 5 files changed, 61 insertions(+), 36 deletions(-) create mode 100644 change/@fluentui-react-1bdbe475-2d17-453e-b058-b152322278cd.json diff --git a/change/@fluentui-react-1bdbe475-2d17-453e-b058-b152322278cd.json b/change/@fluentui-react-1bdbe475-2d17-453e-b058-b152322278cd.json new file mode 100644 index 0000000000000..ec5661ca38e77 --- /dev/null +++ b/change/@fluentui-react-1bdbe475-2d17-453e-b058-b152322278cd.json @@ -0,0 +1,7 @@ +{ + "type": "none", + "comment": "chore: update react.api.md", + "packageName": "@fluentui/react", + "email": "vgenaev@gmail.com", + "dependentChangeType": "none" +} diff --git a/package.json b/package.json index 21667788a385c..5fb8c55d042bb 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "@griffel/webpack-loader": "2.2.10", "@jest/reporters": "29.7.0", "@mdx-js/loader": "2.3.0", - "@microsoft/api-extractor": "7.38.5", + "@microsoft/api-extractor": "7.39.0", "@microsoft/api-extractor-model": "7.28.3", "@microsoft/eslint-plugin-sdl": "0.1.9", "@microsoft/load-themed-styles": "1.10.26", @@ -336,11 +336,11 @@ "tmp": "0.2.1", "ts-jest": "29.1.1", "ts-loader": "9.4.2", - "ts-node": "10.9.1", + "ts-node": "10.9.2", "tsconfig-paths": "4.2.0", "tsconfig-paths-webpack-plugin": "4.1.0", "tslib": "2.6.3", - "typescript": "5.2.2", + "typescript": "5.3.3", "vinyl": "2.2.0", "webpack": "5.94.0", "webpack-bundle-analyzer": "4.10.1", @@ -379,7 +379,6 @@ "swc-loader": "^0.2.6", "prettier": "2.8.8", "puppeteer": "19.6.0", - "@microsoft/api-extractor/typescript": "5.2.2", "ws": "8.17.1" }, "nx": { diff --git a/packages/react/etc/react.api.md b/packages/react/etc/react.api.md index 2cf141de1c40e..94b006c369575 100644 --- a/packages/react/etc/react.api.md +++ b/packages/react/etc/react.api.md @@ -1604,49 +1604,49 @@ export { FabricPerformance } // @public (undocumented) export enum FabricSlots { // (undocumented) - black = 21, + black = 21,// BaseSlots.primaryColor, Shade[Shade.Unshaded]); // (undocumented) - neutralDark = 20, + neutralDark = 20,// BaseSlots.primaryColor, Shade[Shade.Shade1]); // (undocumented) - neutralLight = 11, + neutralLight = 11,// BaseSlots.primaryColor, Shade[Shade.Shade2]); // (undocumented) - neutralLighter = 10, + neutralLighter = 10,// BaseSlots.primaryColor, Shade[Shade.Shade3]); // (undocumented) - neutralLighterAlt = 9, + neutralLighterAlt = 9,// BaseSlots.primaryColor, Shade[Shade.Shade4]); // (undocumented) - neutralPrimary = 19, + neutralPrimary = 19,// BaseSlots.primaryColor, Shade[Shade.Shade5]); // (undocumented) - neutralPrimaryAlt = 18, + neutralPrimaryAlt = 18,// BaseSlots.primaryColor, Shade[Shade.Shade6]); // (undocumented) - neutralQuaternary = 13, + neutralQuaternary = 13,// BaseSlots.primaryColor, Shade[Shade.Shade7]); // (undocumented) - neutralQuaternaryAlt = 12, + neutralQuaternaryAlt = 12,// BaseSlots.primaryColor, Shade[Shade.Shade8]); // (undocumented) - neutralSecondary = 17, + neutralSecondary = 17,// BaseSlots.backgroundColor, Shade[Shade.Shade1]); // (undocumented) - neutralSecondaryAlt = 16, + neutralSecondaryAlt = 16,// BaseSlots.backgroundColor, Shade[Shade.Shade2]); // (undocumented) - neutralTertiary = 15, + neutralTertiary = 15,// BaseSlots.backgroundColor, Shade[Shade.Shade3]); // (undocumented) - neutralTertiaryAlt = 14, + neutralTertiaryAlt = 14,// BaseSlots.backgroundColor, Shade[Shade.Shade4]); // (undocumented) - themeDark = 7, + themeDark = 7,// BaseSlots.backgroundColor, Shade[Shade.Shade5]); // (undocumented) - themeDarkAlt = 6, + themeDarkAlt = 6,// BaseSlots.backgroundColor, Shade[Shade.Shade6]); // bg6 or fg2 // (undocumented) - themeDarker = 8, + themeDarker = 8,// BaseSlots.foregroundColor, Shade[Shade.Shade3]); // (undocumented) - themeLight = 3, + themeLight = 3,// BaseSlots.foregroundColor, Shade[Shade.Shade4]); // (undocumented) - themeLighter = 2, + themeLighter = 2,// BaseSlots.foregroundColor, Shade[Shade.Shade5]); // (undocumented) - themeLighterAlt = 1, + themeLighterAlt = 1,// BaseSlots.foregroundColor, Shade[Shade.Shade6]); // (undocumented) - themePrimary = 0, + themePrimary = 0,// BaseSlots.foregroundColor, Shade[Shade.Unshaded]); // (undocumented) - themeSecondary = 5, + themeSecondary = 5,// BaseSlots.foregroundColor, Shade[Shade.Shade7]); // (undocumented) - themeTertiary = 4, + themeTertiary = 4,// BaseSlots.foregroundColor, Shade[Shade.Shade8]); // (undocumented) white = 22 } diff --git a/packages/react/src/components/ContextualMenu/ContextualMenu.base.tsx b/packages/react/src/components/ContextualMenu/ContextualMenu.base.tsx index 945165847f8d7..c457e42be1a7f 100644 --- a/packages/react/src/components/ContextualMenu/ContextualMenu.base.tsx +++ b/packages/react/src/components/ContextualMenu/ContextualMenu.base.tsx @@ -149,7 +149,7 @@ const _getMenuItemStylesFunction = memoizeFunction( ...styles: (IStyleFunctionOrObject | undefined)[] ): IStyleFunctionOrObject => { return (styleProps: IContextualMenuItemStyleProps) => - concatStyleSetsWithProps(styleProps, getItemStyles, ...styles); + concatStyleSetsWithProps(styleProps, getItemStyles, ...styles) as IContextualMenuItemStyles; }, ); diff --git a/yarn.lock b/yarn.lock index 2e46d32ae3ba1..fd3dbfed34482 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2485,10 +2485,10 @@ "@microsoft/tsdoc-config" "~0.16.1" "@rushstack/node-core-library" "3.62.0" -"@microsoft/api-extractor@7.38.5": - version "7.38.5" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.38.5.tgz#51d4cd917a31fa1a5c6d6a02e446526de763ac32" - integrity sha512-c/w2zfqBcBJxaCzpJNvFoouWewcYrUOfeu5ZkWCCIXTF9a/gXM85RGevEzlMAIEGM/kssAAZSXRJIZ3Q5vLFow== +"@microsoft/api-extractor@7.39.0": + version "7.39.0" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.39.0.tgz#41c25f7f522e8b9376debda07364ff234e602eff" + integrity sha512-PuXxzadgnvp+wdeZFPonssRAj/EW4Gm4s75TXzPk09h3wJ8RS3x7typf95B4vwZRrPTQBGopdUl+/vHvlPdAcg== dependencies: "@microsoft/api-extractor-model" "7.28.3" "@microsoft/tsdoc" "0.14.2" @@ -2501,7 +2501,7 @@ resolve "~1.22.1" semver "~7.5.4" source-map "~0.6.1" - typescript "~5.0.4" + typescript "5.3.3" "@microsoft/applicationinsights-analytics-js@3.3.0": version "3.3.0" @@ -22632,6 +22632,25 @@ ts-node@10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" +ts-node@10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + ts-toolbelt@9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5" @@ -22820,10 +22839,10 @@ typescript-eslint@^8.0.0: "@typescript-eslint/parser" "8.8.1" "@typescript-eslint/utils" "8.8.1" -typescript@5.2.2, typescript@~5.0.4: - version "5.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== +typescript@5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== typescript@~5.4.2: version "5.4.5" From 7f1647fadcd193c0d16e51b314d299ee19ae5746 Mon Sep 17 00:00:00 2001 From: Sean Monahan Date: Thu, 19 Dec 2024 11:53:53 -0800 Subject: [PATCH 05/24] fix: handle cases when Animation.persist() does not exist (#33282) --- ...-f4f8b668-785c-48d9-9d8f-2410472b12f4.json | 7 ++++ .../factories/createMotionComponent.test.tsx | 39 ++++++++++++++++++ .../createPresenceComponent.test.tsx | 40 +++++++++++++++++++ .../library/src/hooks/useAnimateAtoms.ts | 12 +++++- 4 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 change/@fluentui-react-motion-f4f8b668-785c-48d9-9d8f-2410472b12f4.json diff --git a/change/@fluentui-react-motion-f4f8b668-785c-48d9-9d8f-2410472b12f4.json b/change/@fluentui-react-motion-f4f8b668-785c-48d9-9d8f-2410472b12f4.json new file mode 100644 index 0000000000000..81ed563ea2612 --- /dev/null +++ b/change/@fluentui-react-motion-f4f8b668-785c-48d9-9d8f-2410472b12f4.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "fix: handle case when Animation.persist() does not exist", + "packageName": "@fluentui/react-motion", + "email": "seanmonahan@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/packages/react-components/react-motion/library/src/factories/createMotionComponent.test.tsx b/packages/react-components/react-motion/library/src/factories/createMotionComponent.test.tsx index 7106dde042397..6eb1ad024ae2f 100644 --- a/packages/react-components/react-motion/library/src/factories/createMotionComponent.test.tsx +++ b/packages/react-components/react-motion/library/src/factories/createMotionComponent.test.tsx @@ -38,6 +38,27 @@ function createElementMock() { } describe('createMotionComponent', () => { + let hasAnimation: boolean; + beforeEach(() => { + if (!global.Animation) { + hasAnimation = false; + global.Animation = { + // @ts-expect-error mock + prototype: { + persist: jest.fn(), + }, + }; + } else { + hasAnimation = true; + } + }); + + afterEach(() => { + if (!hasAnimation) { + // @ts-expect-error mock + delete global.Animation; + } + }); it('creates a motion and plays it', () => { const TestAtom = createMotionComponent(motion); const { animateMock, ElementMock } = createElementMock(); @@ -54,6 +75,24 @@ describe('createMotionComponent', () => { }); }); + it('creates a motion and plays it (without .persist())', () => { + // @ts-expect-error mock + delete global.Animation.prototype.persist; + const TestAtom = createMotionComponent(motion); + const { animateMock, ElementMock } = createElementMock(); + + render( + + + , + ); + + expect(animateMock).toHaveBeenCalledWith(motion.keyframes, { + duration: 500, + fill: 'forwards', + }); + }); + it('supports functions as motion definitions', () => { const fnMotion = jest.fn().mockImplementation(() => motion); const TestAtom = createMotionComponent(fnMotion); diff --git a/packages/react-components/react-motion/library/src/factories/createPresenceComponent.test.tsx b/packages/react-components/react-motion/library/src/factories/createPresenceComponent.test.tsx index 77472e8c855ba..7d09f1af50647 100644 --- a/packages/react-components/react-motion/library/src/factories/createPresenceComponent.test.tsx +++ b/packages/react-components/react-motion/library/src/factories/createPresenceComponent.test.tsx @@ -44,6 +44,28 @@ function createElementMock() { } describe('createPresenceComponent', () => { + let hasAnimation: boolean; + beforeEach(() => { + if (!global.Animation) { + hasAnimation = false; + global.Animation = { + // @ts-expect-error mock + prototype: { + persist: jest.fn(), + }, + }; + } else { + hasAnimation = true; + } + }); + + afterEach(() => { + if (!hasAnimation) { + // @ts-expect-error mock + delete global.Animation; + } + }); + describe('appear', () => { it('does not animate by default', () => { const TestPresence = createPresenceComponent(motion); @@ -71,6 +93,24 @@ describe('createPresenceComponent', () => { expect(animateMock).toHaveBeenCalledWith(enterKeyframes, options); }); + it('animates when is "true" (without .persist())', () => { + // @ts-expect-error mock + delete window.Animation.prototype.persist; + const TestPresence = createPresenceComponent(motion); + const { animateMock, ElementMock } = createElementMock(); + + render( + + + , + ); + + expect(animateMock).toHaveBeenCalledWith(enterKeyframes, { + ...options, + duration: 500, + }); + }); + it('finishes motion when wrapped in motion behaviour context with skip behaviour', async () => { const TestPresence = createPresenceComponent(motion); const { finishMock, ElementMock } = createElementMock(); diff --git a/packages/react-components/react-motion/library/src/hooks/useAnimateAtoms.ts b/packages/react-components/react-motion/library/src/hooks/useAnimateAtoms.ts index cb0a03544d3a2..9bc31e0d2e9ce 100644 --- a/packages/react-components/react-motion/library/src/hooks/useAnimateAtoms.ts +++ b/packages/react-components/react-motion/library/src/hooks/useAnimateAtoms.ts @@ -2,6 +2,9 @@ import * as React from 'react'; import type { AnimationHandle, AtomMotion } from '../types'; function useAnimateAtomsInSupportedEnvironment() { + // eslint-disable-next-line @nx/workspace-no-restricted-globals + const SUPPORTS_PERSIST = typeof window !== 'undefined' && typeof window.Animation?.prototype.persist === 'function'; + return React.useCallback( ( element: HTMLElement, @@ -22,7 +25,12 @@ function useAnimateAtomsInSupportedEnvironment() { ...(isReducedMotion && { duration: 1 }), }); - animation.persist(); + if (SUPPORTS_PERSIST) { + animation.persist(); + } else { + const resultKeyframe = keyframes[keyframes.length - 1]; + Object.assign(element.style ?? {}, resultKeyframe); + } return animation; }); @@ -75,7 +83,7 @@ function useAnimateAtomsInSupportedEnvironment() { }, }; }, - [], + [SUPPORTS_PERSIST], ); } From df9a753bfdb290a7082fade687a263854c6f55d8 Mon Sep 17 00:00:00 2001 From: Fluent UI Build Date: Fri, 20 Dec 2024 07:20:19 +0000 Subject: [PATCH 06/24] release: applying package updates - react v8 --- ...eact-1bdbe475-2d17-453e-b058-b152322278cd.json | 7 ------- ...ting-f56dc096-9891-4d5c-ae30-4d8a6ac5b481.json | 7 ------- packages/charts/react-charting/CHANGELOG.json | 15 +++++++++++++++ packages/charts/react-charting/CHANGELOG.md | 11 ++++++++++- packages/charts/react-charting/package.json | 2 +- packages/react-docsite-components/CHANGELOG.json | 15 +++++++++++++++ packages/react-docsite-components/CHANGELOG.md | 11 ++++++++++- packages/react-docsite-components/package.json | 4 ++-- packages/react-examples/package.json | 4 ++-- packages/react-monaco-editor/CHANGELOG.json | 15 +++++++++++++++ packages/react-monaco-editor/CHANGELOG.md | 11 ++++++++++- packages/react-monaco-editor/package.json | 4 ++-- packages/react/CHANGELOG.json | 15 +++++++++++++++ 13 files changed, 97 insertions(+), 24 deletions(-) delete mode 100644 change/@fluentui-react-1bdbe475-2d17-453e-b058-b152322278cd.json delete mode 100644 change/@fluentui-react-charting-f56dc096-9891-4d5c-ae30-4d8a6ac5b481.json diff --git a/change/@fluentui-react-1bdbe475-2d17-453e-b058-b152322278cd.json b/change/@fluentui-react-1bdbe475-2d17-453e-b058-b152322278cd.json deleted file mode 100644 index ec5661ca38e77..0000000000000 --- a/change/@fluentui-react-1bdbe475-2d17-453e-b058-b152322278cd.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "none", - "comment": "chore: update react.api.md", - "packageName": "@fluentui/react", - "email": "vgenaev@gmail.com", - "dependentChangeType": "none" -} diff --git a/change/@fluentui-react-charting-f56dc096-9891-4d5c-ae30-4d8a6ac5b481.json b/change/@fluentui-react-charting-f56dc096-9891-4d5c-ae30-4d8a6ac5b481.json deleted file mode 100644 index 5a9fd5dcb3232..0000000000000 --- a/change/@fluentui-react-charting-f56dc096-9891-4d5c-ae30-4d8a6ac5b481.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "patch", - "comment": "Ensure type safety of dependent fields", - "packageName": "@fluentui/react-charting", - "email": "74965306+Anush2303@users.noreply.github.com", - "dependentChangeType": "patch" -} diff --git a/packages/charts/react-charting/CHANGELOG.json b/packages/charts/react-charting/CHANGELOG.json index acee1140b5f49..3937b8e683973 100644 --- a/packages/charts/react-charting/CHANGELOG.json +++ b/packages/charts/react-charting/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-charting", "entries": [ + { + "date": "Fri, 20 Dec 2024 07:20:00 GMT", + "tag": "@fluentui/react-charting_v5.23.28", + "version": "5.23.28", + "comments": { + "patch": [ + { + "author": "74965306+Anush2303@users.noreply.github.com", + "package": "@fluentui/react-charting", + "commit": "da882f44f251e7bb80fb969cbe268a942a2df74e", + "comment": "Ensure type safety of dependent fields" + } + ] + } + }, { "date": "Wed, 18 Dec 2024 07:20:30 GMT", "tag": "@fluentui/react-charting_v5.23.27", diff --git a/packages/charts/react-charting/CHANGELOG.md b/packages/charts/react-charting/CHANGELOG.md index 72c5d609b0da2..6c3807c6aee3f 100644 --- a/packages/charts/react-charting/CHANGELOG.md +++ b/packages/charts/react-charting/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-charting -This log was last generated on Wed, 18 Dec 2024 07:20:30 GMT and should not be manually modified. +This log was last generated on Fri, 20 Dec 2024 07:20:00 GMT and should not be manually modified. +## [5.23.28](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.23.28) + +Fri, 20 Dec 2024 07:20:00 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.23.27..@fluentui/react-charting_v5.23.28) + +### Patches + +- Ensure type safety of dependent fields ([PR #33486](https://github.com/microsoft/fluentui/pull/33486) by 74965306+Anush2303@users.noreply.github.com) + ## [5.23.27](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.23.27) Wed, 18 Dec 2024 07:20:30 GMT diff --git a/packages/charts/react-charting/package.json b/packages/charts/react-charting/package.json index e78fef53be50f..cb9875c26eff9 100644 --- a/packages/charts/react-charting/package.json +++ b/packages/charts/react-charting/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-charting", - "version": "5.23.27", + "version": "5.23.28", "description": "React web charting controls for Microsoft fluentui system.", "main": "lib-commonjs/index.js", "module": "lib/index.js", diff --git a/packages/react-docsite-components/CHANGELOG.json b/packages/react-docsite-components/CHANGELOG.json index 8b4cca059f34c..2585b860f11c5 100644 --- a/packages/react-docsite-components/CHANGELOG.json +++ b/packages/react-docsite-components/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-docsite-components", "entries": [ + { + "date": "Fri, 20 Dec 2024 07:20:01 GMT", + "tag": "@fluentui/react-docsite-components_v8.13.148", + "version": "8.13.148", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-docsite-components", + "comment": "Bump @fluentui/react-monaco-editor to v1.7.266", + "commit": "7f1647fadcd193c0d16e51b314d299ee19ae5746" + } + ] + } + }, { "date": "Wed, 18 Dec 2024 07:20:30 GMT", "tag": "@fluentui/react-docsite-components_v8.13.147", diff --git a/packages/react-docsite-components/CHANGELOG.md b/packages/react-docsite-components/CHANGELOG.md index 0863e3108f4ec..0d0d9c53d902c 100644 --- a/packages/react-docsite-components/CHANGELOG.md +++ b/packages/react-docsite-components/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-docsite-components -This log was last generated on Wed, 18 Dec 2024 07:20:30 GMT and should not be manually modified. +This log was last generated on Fri, 20 Dec 2024 07:20:01 GMT and should not be manually modified. +## [8.13.148](https://github.com/microsoft/fluentui/tree/@fluentui/react-docsite-components_v8.13.148) + +Fri, 20 Dec 2024 07:20:01 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-docsite-components_v8.13.147..@fluentui/react-docsite-components_v8.13.148) + +### Patches + +- Bump @fluentui/react-monaco-editor to v1.7.266 ([PR #33282](https://github.com/microsoft/fluentui/pull/33282) by beachball) + ## [8.13.147](https://github.com/microsoft/fluentui/tree/@fluentui/react-docsite-components_v8.13.147) Wed, 18 Dec 2024 07:20:30 GMT diff --git a/packages/react-docsite-components/package.json b/packages/react-docsite-components/package.json index 332e0c7d90785..85d4c1e9845d1 100644 --- a/packages/react-docsite-components/package.json +++ b/packages/react-docsite-components/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-docsite-components", - "version": "8.13.147", + "version": "8.13.148", "description": "Fluent UI React components for building documentation sites.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -42,7 +42,7 @@ "@fluentui/public-docsite-setup": "^0.3.34", "@fluentui/react-hooks": "^8.8.16", "@fluentui/set-version": "^8.2.23", - "@fluentui/react-monaco-editor": "^1.7.265", + "@fluentui/react-monaco-editor": "^1.7.266", "color-check": "0.0.2", "markdown-to-jsx": "^7.0.0", "office-ui-fabric-core": "^11.0.0", diff --git a/packages/react-examples/package.json b/packages/react-examples/package.json index 4d66a4561fb57..842f999d0a77c 100644 --- a/packages/react-examples/package.json +++ b/packages/react-examples/package.json @@ -36,8 +36,8 @@ "@fluentui/merge-styles": "^8.6.13", "@fluentui/react": "^8.122.1", "@fluentui/react-cards": "^0.205.190", - "@fluentui/react-charting": "^5.23.27", - "@fluentui/react-docsite-components": "^8.13.147", + "@fluentui/react-charting": "^5.23.28", + "@fluentui/react-docsite-components": "^8.13.148", "@fluentui/react-experiments": "^8.14.187", "@fluentui/react-file-type-icons": "^8.12.6", "@fluentui/react-focus": "^8.9.19", diff --git a/packages/react-monaco-editor/CHANGELOG.json b/packages/react-monaco-editor/CHANGELOG.json index 472fd9eb9e149..740f2aa7273fb 100644 --- a/packages/react-monaco-editor/CHANGELOG.json +++ b/packages/react-monaco-editor/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-monaco-editor", "entries": [ + { + "date": "Fri, 20 Dec 2024 07:20:01 GMT", + "tag": "@fluentui/react-monaco-editor_v1.7.266", + "version": "1.7.266", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-monaco-editor", + "comment": "Bump @fluentui/react-charting to v5.23.28", + "commit": "7f1647fadcd193c0d16e51b314d299ee19ae5746" + } + ] + } + }, { "date": "Wed, 18 Dec 2024 07:20:30 GMT", "tag": "@fluentui/react-monaco-editor_v1.7.265", diff --git a/packages/react-monaco-editor/CHANGELOG.md b/packages/react-monaco-editor/CHANGELOG.md index a460be88d91fe..5e394b3022200 100644 --- a/packages/react-monaco-editor/CHANGELOG.md +++ b/packages/react-monaco-editor/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-monaco-editor -This log was last generated on Wed, 18 Dec 2024 07:20:30 GMT and should not be manually modified. +This log was last generated on Fri, 20 Dec 2024 07:20:01 GMT and should not be manually modified. +## [1.7.266](https://github.com/microsoft/fluentui/tree/@fluentui/react-monaco-editor_v1.7.266) + +Fri, 20 Dec 2024 07:20:01 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-monaco-editor_v1.7.265..@fluentui/react-monaco-editor_v1.7.266) + +### Patches + +- Bump @fluentui/react-charting to v5.23.28 ([PR #33282](https://github.com/microsoft/fluentui/pull/33282) by beachball) + ## [1.7.265](https://github.com/microsoft/fluentui/tree/@fluentui/react-monaco-editor_v1.7.265) Wed, 18 Dec 2024 07:20:30 GMT diff --git a/packages/react-monaco-editor/package.json b/packages/react-monaco-editor/package.json index 667690e29d7d0..a2341d0e51366 100644 --- a/packages/react-monaco-editor/package.json +++ b/packages/react-monaco-editor/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-monaco-editor", - "version": "1.7.265", + "version": "1.7.266", "description": "Live React example editing using monaco", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -34,7 +34,7 @@ "@fluentui/example-data": "^8.4.25", "@fluentui/monaco-editor": "^1.3.24", "@fluentui/react-hooks": "^8.8.16", - "@fluentui/react-charting": "^5.23.27", + "@fluentui/react-charting": "^5.23.28", "raw-loader": "4.0.2", "react-syntax-highlighter": "^10.1.3", "tslib": "^2.1.0" diff --git a/packages/react/CHANGELOG.json b/packages/react/CHANGELOG.json index ba3ddc75cd740..36540852fabb6 100644 --- a/packages/react/CHANGELOG.json +++ b/packages/react/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react", "entries": [ + { + "date": "Fri, 20 Dec 2024 07:20:00 GMT", + "tag": "@fluentui/react_v8.122.1", + "version": "8.122.1", + "comments": { + "none": [ + { + "author": "vgenaev@gmail.com", + "package": "@fluentui/react", + "commit": "00fada2af3a290e83ba3812ab3440b5ae8a903cf", + "comment": "chore: update react.api.md" + } + ] + } + }, { "date": "Fri, 13 Dec 2024 07:23:12 GMT", "tag": "@fluentui/react_v8.122.1", From fc5f0b1caeda7a80a9ecc2b713e90bdca7a70dd2 Mon Sep 17 00:00:00 2001 From: Valentyna Date: Fri, 20 Dec 2024 05:20:14 -0800 Subject: [PATCH 07/24] perf-app: Added performance test scenario for the ColorPicker (#33496) --- apps/perf-test-react-components/package.json | 1 + .../src/scenarios/ColorPicker.tsx | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 apps/perf-test-react-components/src/scenarios/ColorPicker.tsx diff --git a/apps/perf-test-react-components/package.json b/apps/perf-test-react-components/package.json index 5abb8084ee4da..f5013b053a5a7 100644 --- a/apps/perf-test-react-components/package.json +++ b/apps/perf-test-react-components/package.json @@ -21,6 +21,7 @@ "@fluentui/scripts-perf-test-flamegrill": "*", "@fluentui/react-avatar": "*", "@fluentui/react-button": "*", + "@fluentui/react-color-picker-preview": "*", "@fluentui/react-components": "*", "@fluentui/react-field": "*", "@fluentui/react-persona": "*", diff --git a/apps/perf-test-react-components/src/scenarios/ColorPicker.tsx b/apps/perf-test-react-components/src/scenarios/ColorPicker.tsx new file mode 100644 index 0000000000000..4406ac2fe3a9a --- /dev/null +++ b/apps/perf-test-react-components/src/scenarios/ColorPicker.tsx @@ -0,0 +1,18 @@ +import * as React from 'react'; +import { ColorPicker, ColorArea, ColorSlider, AlphaSlider } from '@fluentui/react-color-picker-preview'; +import { FluentProvider } from '@fluentui/react-provider'; +import { webLightTheme } from '@fluentui/react-theme'; + +const Scenario = () => ( + + + + + +); + +Scenario.decorator = (props: { children: React.ReactNode }) => ( + {props.children} +); + +export default Scenario; From 03bae172df939e56958fdedb94094d4e3dce33fe Mon Sep 17 00:00:00 2001 From: Valentyna Date: Fri, 20 Dec 2024 05:55:42 -0800 Subject: [PATCH 08/24] test(react-color-picker): added vr tests (#33491) Co-authored-by: Victor Genaev --- apps/vr-tests-react-components/package.json | 1 + .../ColorPicker/ColorPicker.stories.tsx | 30 +++++++++++++++++++ .../src/stories/ColorPicker/utils.tsx | 16 ++++++++++ 3 files changed, 47 insertions(+) create mode 100644 apps/vr-tests-react-components/src/stories/ColorPicker/ColorPicker.stories.tsx create mode 100644 apps/vr-tests-react-components/src/stories/ColorPicker/utils.tsx diff --git a/apps/vr-tests-react-components/package.json b/apps/vr-tests-react-components/package.json index 555ce58bd2368..97c72699d3970 100644 --- a/apps/vr-tests-react-components/package.json +++ b/apps/vr-tests-react-components/package.json @@ -27,6 +27,7 @@ "@fluentui/react-card": "*", "@fluentui/react-charts-preview": "*", "@fluentui/react-checkbox": "*", + "@fluentui/react-color-picker-preview": "*", "@fluentui/react-combobox": "*", "@fluentui/react-context-selector": "*", "@fluentui/react-datepicker-compat": "*", diff --git a/apps/vr-tests-react-components/src/stories/ColorPicker/ColorPicker.stories.tsx b/apps/vr-tests-react-components/src/stories/ColorPicker/ColorPicker.stories.tsx new file mode 100644 index 0000000000000..fd45bdc75342b --- /dev/null +++ b/apps/vr-tests-react-components/src/stories/ColorPicker/ColorPicker.stories.tsx @@ -0,0 +1,30 @@ +import * as React from 'react'; +import type { Meta } from '@storybook/react'; +import { ColorPicker } from '@fluentui/react-color-picker-preview'; +import { SampleColorPicker } from './utils'; +import { Steps } from 'storywright'; + +import { DARK_MODE, getStoryVariant, HIGH_CONTRAST, RTL, withStoryWrightSteps } from '../../utilities'; + +export default { + title: 'ColorPicker Converged', + decorators: [ + story => withStoryWrightSteps({ story, steps: new Steps().snapshot('default', { cropTo: '.testWrapper' }).end() }), + ], +} satisfies Meta; + +export const Default = () => ; + +export const DefaultDarkMode = getStoryVariant(Default, DARK_MODE); + +export const DefaultHighContrast = getStoryVariant(Default, HIGH_CONTRAST); + +export const DefaultRTL = getStoryVariant(Default, RTL); + +export const Shape = () => ( + <> + + + +); +Shape.storyName = 'shape'; diff --git a/apps/vr-tests-react-components/src/stories/ColorPicker/utils.tsx b/apps/vr-tests-react-components/src/stories/ColorPicker/utils.tsx new file mode 100644 index 0000000000000..dd5166d0fa2db --- /dev/null +++ b/apps/vr-tests-react-components/src/stories/ColorPicker/utils.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import { + ColorPicker, + ColorArea, + AlphaSlider, + ColorSlider, + type ColorPickerProps, +} from '@fluentui/react-color-picker-preview'; + +export const SampleColorPicker = (props: ColorPickerProps) => ( + + + + + +); From dc7bb663e3d93a19b611cf1892556d69c57b1269 Mon Sep 17 00:00:00 2001 From: Oleksandr Fediashov Date: Fri, 20 Dec 2024 18:46:35 +0200 Subject: [PATCH 09/24] chore: remove usage of "export *" (#33448) --- .../src/utilities/index.ts | 12 ++- ...-64d49103-6d6d-4ef0-93f0-2339233931e5.json | 7 ++ ...-75e61142-a4e1-4046-9076-316b44c873ca.json | 7 ++ ...-33c0a62b-e18c-45a1-9fbd-bfd7089f997c.json | 7 ++ ...-a7f6eac5-5e7c-40b4-ae8c-4b3dab5bc372.json | 7 ++ ...-576e3635-ea2b-48cd-b8bd-f35566e66189.json | 7 ++ .../a11y-testing/src/definitions/index.ts | 37 ++++++--- packages/a11y-testing/src/facades/index.ts | 2 +- packages/a11y-testing/src/index.ts | 32 ++++++-- packages/a11y-testing/src/rules/index.ts | 2 +- packages/a11y-testing/src/validators/index.ts | 2 +- .../codeMods/tests/mock/compat/mockIndex.ts | 4 +- .../codemods/src/codeMods/utilities/index.ts | 8 +- packages/eslint-plugin/src/configs/base.js | 5 +- .../theme-designer/src/colors/index.ts | 79 +++++++++++++++++-- packages/react-conformance/src/utils/index.ts | 6 +- packages/react-icon-provider/src/index.ts | 9 ++- packages/storybook/src/decorators/index.ts | 4 +- packages/theme/src/colors/index.ts | 2 +- packages/theme/src/createTheme.test.ts | 4 +- packages/theme/src/fonts/createFontStyles.ts | 2 +- packages/theme/src/fonts/index.ts | 2 +- packages/theme/src/index.ts | 42 ++++++++-- packages/theme/src/motion/index.ts | 4 +- packages/theme/src/types/index.ts | 2 +- .../utils/index.ts | 4 +- scripts/github/src/index.ts | 7 +- 27 files changed, 241 insertions(+), 65 deletions(-) create mode 100644 change/@fluentui-codemods-64d49103-6d6d-4ef0-93f0-2339233931e5.json create mode 100644 change/@fluentui-eslint-plugin-75e61142-a4e1-4046-9076-316b44c873ca.json create mode 100644 change/@fluentui-react-conformance-33c0a62b-e18c-45a1-9fbd-bfd7089f997c.json create mode 100644 change/@fluentui-react-icon-provider-a7f6eac5-5e7c-40b4-ae8c-4b3dab5bc372.json create mode 100644 change/@fluentui-theme-576e3635-ea2b-48cd-b8bd-f35566e66189.json diff --git a/apps/vr-tests-react-components/src/utilities/index.ts b/apps/vr-tests-react-components/src/utilities/index.ts index 177f1172845a5..4cb4101034aa9 100644 --- a/apps/vr-tests-react-components/src/utilities/index.ts +++ b/apps/vr-tests-react-components/src/utilities/index.ts @@ -1,3 +1,9 @@ -export * from './TestWrapperDecorator'; -export * from './getStoryVariant'; -export * from './withStoryWrightSteps'; +export { + TestWrapperDecorator, + TestWrapperDecoratorFixedWidth, + TestWrapperDecoratorFullWidth, + TestWrapperDecoratorTall, + TestWrapperDecoratorTallFixedWidth, +} from './TestWrapperDecorator'; +export { DARK_MODE, HIGH_CONTRAST, RTL, getStoryVariant } from './getStoryVariant'; +export { withStoryWrightSteps } from './withStoryWrightSteps'; diff --git a/change/@fluentui-codemods-64d49103-6d6d-4ef0-93f0-2339233931e5.json b/change/@fluentui-codemods-64d49103-6d6d-4ef0-93f0-2339233931e5.json new file mode 100644 index 0000000000000..f67a35684218e --- /dev/null +++ b/change/@fluentui-codemods-64d49103-6d6d-4ef0-93f0-2339233931e5.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "chore: remove usage of \"export *\"", + "packageName": "@fluentui/codemods", + "email": "olfedias@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@fluentui-eslint-plugin-75e61142-a4e1-4046-9076-316b44c873ca.json b/change/@fluentui-eslint-plugin-75e61142-a4e1-4046-9076-316b44c873ca.json new file mode 100644 index 0000000000000..b6692f2581c7b --- /dev/null +++ b/change/@fluentui-eslint-plugin-75e61142-a4e1-4046-9076-316b44c873ca.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "chore: remove usage of \"export *\"", + "packageName": "@fluentui/eslint-plugin", + "email": "olfedias@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@fluentui-react-conformance-33c0a62b-e18c-45a1-9fbd-bfd7089f997c.json b/change/@fluentui-react-conformance-33c0a62b-e18c-45a1-9fbd-bfd7089f997c.json new file mode 100644 index 0000000000000..132ef6bac19f5 --- /dev/null +++ b/change/@fluentui-react-conformance-33c0a62b-e18c-45a1-9fbd-bfd7089f997c.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "chore: remove usage of \"export *\"", + "packageName": "@fluentui/react-conformance", + "email": "olfedias@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@fluentui-react-icon-provider-a7f6eac5-5e7c-40b4-ae8c-4b3dab5bc372.json b/change/@fluentui-react-icon-provider-a7f6eac5-5e7c-40b4-ae8c-4b3dab5bc372.json new file mode 100644 index 0000000000000..7949b00332d92 --- /dev/null +++ b/change/@fluentui-react-icon-provider-a7f6eac5-5e7c-40b4-ae8c-4b3dab5bc372.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "chore: remove usage of \"export *\"", + "packageName": "@fluentui/react-icon-provider", + "email": "olfedias@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@fluentui-theme-576e3635-ea2b-48cd-b8bd-f35566e66189.json b/change/@fluentui-theme-576e3635-ea2b-48cd-b8bd-f35566e66189.json new file mode 100644 index 0000000000000..aa1ed0df91a3a --- /dev/null +++ b/change/@fluentui-theme-576e3635-ea2b-48cd-b8bd-f35566e66189.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "chore: remove usage of \"export *\"", + "packageName": "@fluentui/theme", + "email": "olfedias@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/packages/a11y-testing/src/definitions/index.ts b/packages/a11y-testing/src/definitions/index.ts index 1531d60a3003d..3fb5393e65933 100644 --- a/packages/a11y-testing/src/definitions/index.ts +++ b/packages/a11y-testing/src/definitions/index.ts @@ -1,12 +1,25 @@ -export * from './Button/buttonBehaviorDefinition'; -export * from './Button/buttonGroupBehaviorDefinition'; -export * from './Button/toggleButtonBehaviorDefinition'; -export * from './Link/linkBehaviorDefinition'; -export * from './MenuButton/menuButtonBehaviorDefinition'; -export * from './Pill/pillActionBehaviorDefinition'; -export * from './Pill/pillBehaviorDefinition'; -export * from './Pill/pillOptionBehaviorDefinition'; -export * from './Pill/pillGroupBehaviorDefinition'; -export * from './Popup/popupBehaviorDefinition'; - -export * from './react-button/buttonAccessibilityBehaviorDefinition'; +export { buttonBehaviorDefinition } from './Button/buttonBehaviorDefinition'; +export { buttonGroupBehaviorDefinition } from './Button/buttonGroupBehaviorDefinition'; +export { toggleButtonBehaviorDefinition } from './Button/toggleButtonBehaviorDefinition'; +export { linkBehaviorDefinition } from './Link/linkBehaviorDefinition'; +export { + menuButtonBehaviorDefinition, + menuButtonBehaviorDefinitionMenuSlot, + menuButtonBehaviorDefinitionMenuSlotWithoutID, + menuButtonBehaviorDefinitionTriggerSlotNotTabbable, + menuButtonBehaviorDefinitionTriggerSlotTabbable, + menuButtonBehaviorDefinitionTriggerSlotWithoutID, + menuButtonBehaviorDefinitionTriggerWithTabIndex, +} from './MenuButton/menuButtonBehaviorDefinition'; +export { pillActionBehaviorDefinition } from './Pill/pillActionBehaviorDefinition'; +export { pillBehaviorDefinition } from './Pill/pillBehaviorDefinition'; +export { pillOptionBehaviorDefinition } from './Pill/pillOptionBehaviorDefinition'; +export { pillGroupBehaviorDefinition } from './Pill/pillGroupBehaviorDefinition'; +export { + popupBehaviorDefinition, + popupBehaviorDefinitionPopupSlot, + popupBehaviorDefinitionTriggerSlotNotTabbable, + popupBehaviorDefinitionTriggerSlotTabbable, + popupBehaviorDefinitionTriggerSlotWithTabIndex, +} from './Popup/popupBehaviorDefinition'; +export { buttonAccessibilityBehaviorDefinition } from './react-button/buttonAccessibilityBehaviorDefinition'; diff --git a/packages/a11y-testing/src/facades/index.ts b/packages/a11y-testing/src/facades/index.ts index d19131b078753..ab5bf4a01cf11 100644 --- a/packages/a11y-testing/src/facades/index.ts +++ b/packages/a11y-testing/src/facades/index.ts @@ -1 +1 @@ -export * from './ComponentTestFacade'; +export { ComponentTestFacade } from './ComponentTestFacade'; diff --git a/packages/a11y-testing/src/index.ts b/packages/a11y-testing/src/index.ts index 82aa973589eed..5c7b2b7080421 100644 --- a/packages/a11y-testing/src/index.ts +++ b/packages/a11y-testing/src/index.ts @@ -1,5 +1,27 @@ -export * from './types'; -export * from './validators/index'; -export * from './facades/index'; -export * from './rules/index'; -export * from './definitions/index'; +export type { AccessibilityBehavior, PropValue, Props, Rule, Slot, TestFacade } from './types'; +export { validateBehavior, validateSlot } from './validators/index'; +export { ComponentTestFacade } from './facades/index'; +export { BehaviorRule, SlotRule } from './rules/index'; +export { + buttonAccessibilityBehaviorDefinition, + buttonBehaviorDefinition, + buttonGroupBehaviorDefinition, + linkBehaviorDefinition, + menuButtonBehaviorDefinition, + menuButtonBehaviorDefinitionMenuSlot, + menuButtonBehaviorDefinitionMenuSlotWithoutID, + menuButtonBehaviorDefinitionTriggerSlotNotTabbable, + menuButtonBehaviorDefinitionTriggerSlotTabbable, + menuButtonBehaviorDefinitionTriggerSlotWithoutID, + menuButtonBehaviorDefinitionTriggerWithTabIndex, + pillActionBehaviorDefinition, + pillBehaviorDefinition, + pillGroupBehaviorDefinition, + pillOptionBehaviorDefinition, + popupBehaviorDefinition, + popupBehaviorDefinitionPopupSlot, + popupBehaviorDefinitionTriggerSlotNotTabbable, + popupBehaviorDefinitionTriggerSlotTabbable, + popupBehaviorDefinitionTriggerSlotWithTabIndex, + toggleButtonBehaviorDefinition, +} from './definitions/index'; diff --git a/packages/a11y-testing/src/rules/index.ts b/packages/a11y-testing/src/rules/index.ts index 6a37aaa5d4bd9..ea187657ec1fe 100644 --- a/packages/a11y-testing/src/rules/index.ts +++ b/packages/a11y-testing/src/rules/index.ts @@ -1 +1 @@ -export * from './rules'; +export { BehaviorRule, SlotRule } from './rules'; diff --git a/packages/a11y-testing/src/validators/index.ts b/packages/a11y-testing/src/validators/index.ts index c1e396d956c66..0cde4fb6d5cfb 100644 --- a/packages/a11y-testing/src/validators/index.ts +++ b/packages/a11y-testing/src/validators/index.ts @@ -1 +1 @@ -export * from './validate'; +export { validateBehavior, validateSlot } from './validate'; diff --git a/packages/codemods/src/codeMods/tests/mock/compat/mockIndex.ts b/packages/codemods/src/codeMods/tests/mock/compat/mockIndex.ts index 2b56b16369367..69ff37c638f1b 100644 --- a/packages/codemods/src/codeMods/tests/mock/compat/mockIndex.ts +++ b/packages/codemods/src/codeMods/tests/mock/compat/mockIndex.ts @@ -1,2 +1,2 @@ -export * from './Button'; -export * from './DefaultButton'; +export { Button, OtherButton } from './Button'; +export { DefaultButton } from './DefaultButton'; diff --git a/packages/codemods/src/codeMods/utilities/index.ts b/packages/codemods/src/codeMods/utilities/index.ts index 95a9bb3bbafac..aaf4eede1810a 100644 --- a/packages/codemods/src/codeMods/utilities/index.ts +++ b/packages/codemods/src/codeMods/utilities/index.ts @@ -1,4 +1,4 @@ -export * from './jsx'; -export * from './imports'; -export * from './props'; -export * from './transforms'; +export { findJsxTag } from './jsx'; +export { appendOrCreateNamedImport, getImportsByPath, renameImport, repathImport } from './imports'; +export { renameProp } from './props'; +export { boolTransform, enumTransform, numberTransform, stringTransform } from './transforms'; diff --git a/packages/eslint-plugin/src/configs/base.js b/packages/eslint-plugin/src/configs/base.js index 2423f8a7b8b88..cab360135da70 100644 --- a/packages/eslint-plugin/src/configs/base.js +++ b/packages/eslint-plugin/src/configs/base.js @@ -19,10 +19,9 @@ module.exports = { }, overrides: [ { - files: '**/src/index.{ts,tsx,js}', + files: '**/src/**/*.{ts,tsx,js}', rules: { - // TODO: propagate to `error` once all packages barrel files have been fixed - '@rnx-kit/no-export-all': ['warn', { expand: 'all' }], + '@rnx-kit/no-export-all': ['error', { expand: 'all' }], }, }, ], diff --git a/packages/react-components/theme-designer/src/colors/index.ts b/packages/react-components/theme-designer/src/colors/index.ts index 7cecca373ae30..eb71c535281b8 100644 --- a/packages/react-components/theme-designer/src/colors/index.ts +++ b/packages/react-components/theme-designer/src/colors/index.ts @@ -1,5 +1,74 @@ -export * from './csswg'; -export * from './geometry'; -export * from './palettes'; -export * from './templates'; -export * from './types'; +export { + D50_to_D65, + D65_to_D50, + LAB_to_sRGB, + LCH_to_Lab, + LCH_to_P3, + LCH_to_r2020, + LCH_to_sRGB, + Lab_to_LCH, + Lab_to_XYZ, + P3_to_LCH, + XYZ_to_Lab, + XYZ_to_lin_2020, + XYZ_to_lin_P3, + XYZ_to_lin_ProPhoto, + XYZ_to_lin_a98rgb, + XYZ_to_lin_sRGB, + XYZ_to_uv, + XYZ_to_xy, + contrast, + gam_2020, + gam_P3, + gam_ProPhoto, + gam_a98rgb, + gam_sRGB, + hslToRgb, + hueToChannel, + lin_2020, + lin_2020_to_XYZ, + lin_P3, + lin_P3_to_XYZ, + lin_ProPhoto, + lin_ProPhoto_to_XYZ, + lin_a98rgb, + lin_a98rgb_to_XYZ, + lin_sRGB, + lin_sRGB_to_XYZ, + naive_CMYK_to_sRGB, + naive_sRGB_to_CMYK, + r2020_to_LCH, + rgbToHsv, + sRGB_to_LAB, + sRGB_to_LCH, + sRGB_to_luminance, + snap_into_gamut, + xy_to_uv, +} from './csswg'; +export { getPointOnCurvePath, getPointsOnCurvePath } from './geometry'; +export { + Lab_to_hex, + curvePathFromPalette, + hexColorsFromPalette, + hex_to_LCH, + hex_to_sRGB, + paletteShadesFromCurve, + sRGB_to_hex, +} from './palettes'; +export { paletteTemplate, themeTemplate } from './templates'; +export type { + Curve, + CurvePath, + CurvedHelixPath, + NamedPalette, + NamedTheme, + Palette, + PaletteConfig, + Theme, + ThemeCollectionInclude, + TokenPackageConfig, + TokenPackageType, + Vec2, + Vec3, + Vec4, +} from './types'; diff --git a/packages/react-conformance/src/utils/index.ts b/packages/react-conformance/src/utils/index.ts index 417145e92af8c..e0d5b3bc53c2c 100644 --- a/packages/react-conformance/src/utils/index.ts +++ b/packages/react-conformance/src/utils/index.ts @@ -1,4 +1,4 @@ -export * from './errorMessages'; -export * from './getCallbackArguments'; +export { errorMessageColors, getErrorMessage, formatErrors, formatArray } from './errorMessages'; +export { type ArgumentName, getCallbackArguments } from './getCallbackArguments'; export { getPackagePath } from './getPackagePath'; -export * from './validateCallbackArguments'; +export { validateCallbackArguments } from './validateCallbackArguments'; diff --git a/packages/react-icon-provider/src/index.ts b/packages/react-icon-provider/src/index.ts index b77b5beee663c..9e6599b016afe 100644 --- a/packages/react-icon-provider/src/index.ts +++ b/packages/react-icon-provider/src/index.ts @@ -1,4 +1,9 @@ import './version'; -export * from './IconProvider'; -export * from './IconProvider.types'; +export { + // eslint-disable-next-line @fluentui/ban-context-export + IconContext, + IconProvider, + useIconSubset, +} from './IconProvider'; +export type { IconProviderProps } from './IconProvider.types'; diff --git a/packages/storybook/src/decorators/index.ts b/packages/storybook/src/decorators/index.ts index e3cc4b5aedf72..55f30fc85de53 100644 --- a/packages/storybook/src/decorators/index.ts +++ b/packages/storybook/src/decorators/index.ts @@ -1,2 +1,2 @@ -export * from './withKeytipLayer'; -export * from './withStrictMode'; +export { KeytipLayerWrapper, withKeytipLayer } from './withKeytipLayer'; +export { withStrictMode } from './withStrictMode'; diff --git a/packages/theme/src/colors/index.ts b/packages/theme/src/colors/index.ts index ff7e7f43d24a0..8afd234044eba 100644 --- a/packages/theme/src/colors/index.ts +++ b/packages/theme/src/colors/index.ts @@ -1,2 +1,2 @@ -export * from './FluentColors'; +export { CommunicationColors, NeutralColors, SharedColors } from './FluentColors'; export { DefaultPalette } from './DefaultPalette'; diff --git a/packages/theme/src/createTheme.test.ts b/packages/theme/src/createTheme.test.ts index 229c767e57e85..9e31eda4aced8 100644 --- a/packages/theme/src/createTheme.test.ts +++ b/packages/theme/src/createTheme.test.ts @@ -17,7 +17,7 @@ describe('createTheme', () => { it('applies defaultFontStyle to fonts and retains all other default values', () => { const defaultFontStyle: IRawStyle = { fontFamily: 'Segoe UI' }; - const userTheme = { defaultFontStyle: defaultFontStyle }; + const userTheme = { defaultFontStyle }; const newTheme = createTheme(userTheme); expect(newTheme.fonts.tiny.fontFamily).toEqual('Segoe UI'); @@ -38,7 +38,7 @@ describe('createTheme', () => { it('applies defaultFontStyle and fonts to theme and retains all other default values', () => { const defaultFontStyle: IRawStyle = { fontFamily: 'Foo', fontSize: '10px' }; - const userTheme = { defaultFontStyle: defaultFontStyle, fonts: { small: { fontSize: '20px' } } }; + const userTheme = { defaultFontStyle, fonts: { small: { fontSize: '20px' } } }; const newTheme = createTheme(userTheme); expect(newTheme.fonts.tiny.fontFamily).toEqual('Foo'); diff --git a/packages/theme/src/fonts/createFontStyles.ts b/packages/theme/src/fonts/createFontStyles.ts index 110f20d5a14a2..a0e6ce9e641c0 100644 --- a/packages/theme/src/fonts/createFontStyles.ts +++ b/packages/theme/src/fonts/createFontStyles.ts @@ -60,7 +60,7 @@ function _getLocalizedFontFamily(language: string | null): string { function _createFont(size: string, weight: IFontWeight, fontFamily: string): IRawStyle { return { - fontFamily: fontFamily, + fontFamily, MozOsxFontSmoothing: 'grayscale', WebkitFontSmoothing: 'antialiased', fontSize: size, diff --git a/packages/theme/src/fonts/index.ts b/packages/theme/src/fonts/index.ts index 18bf112b87acc..d92e4cda94448 100644 --- a/packages/theme/src/fonts/index.ts +++ b/packages/theme/src/fonts/index.ts @@ -1,3 +1,3 @@ -export * from './FluentFonts'; +export { FontSizes, FontWeights, IconFontSizes, LocalizedFontFamilies, LocalizedFontNames } from './FluentFonts'; export { createFontStyles } from './createFontStyles'; export { DefaultFontStyles, registerDefaultFontFaces } from './DefaultFontStyles'; diff --git a/packages/theme/src/index.ts b/packages/theme/src/index.ts index 599be1d8215cb..59273db9a4636 100644 --- a/packages/theme/src/index.ts +++ b/packages/theme/src/index.ts @@ -1,11 +1,37 @@ -export * from './mergeThemes'; -export * from './types/index'; -export * from './colors/index'; -export * from './effects/index'; -export * from './spacing/index'; -export * from './motion/index'; -export * from './fonts/index'; -export * from './createTheme'; +export { mergeThemes } from './mergeThemes'; +export type { + ComponentStyles, + ComponentsStyles, + IAnimationStyles, + IAnimationVariables, + IEffects, + IFontStyles, + IPalette, + IPartialTheme, + IScheme, + ISchemeNames, + ISemanticColors, + ISemanticTextColors, + ISpacing, + ITheme, + PartialTheme, + Theme, +} from './types/index'; +export { CommunicationColors, DefaultPalette, NeutralColors, SharedColors } from './colors/index'; +export { DefaultEffects, Depths } from './effects/index'; +export { DefaultSpacing } from './spacing/index'; +export { AnimationStyles, AnimationVariables, MotionAnimations, MotionDurations, MotionTimings } from './motion/index'; +export { + DefaultFontStyles, + FontSizes, + FontWeights, + IconFontSizes, + LocalizedFontFamilies, + LocalizedFontNames, + createFontStyles, + registerDefaultFontFaces, +} from './fonts/index'; +export { createTheme } from './createTheme'; export { FluentTheme } from './FluentTheme'; import './version'; diff --git a/packages/theme/src/motion/index.ts b/packages/theme/src/motion/index.ts index fd97dbeb9b772..ff707884d5a38 100644 --- a/packages/theme/src/motion/index.ts +++ b/packages/theme/src/motion/index.ts @@ -1,2 +1,2 @@ -export * from './FluentMotion'; -export * from './AnimationStyles'; +export { MotionAnimations, MotionDurations, MotionTimings } from './FluentMotion'; +export { AnimationStyles, AnimationVariables } from './AnimationStyles'; diff --git a/packages/theme/src/types/index.ts b/packages/theme/src/types/index.ts index 97e5a3bad18ca..8e7580a51cb20 100644 --- a/packages/theme/src/types/index.ts +++ b/packages/theme/src/types/index.ts @@ -1,4 +1,4 @@ -export * from './Theme'; +export type { ComponentStyles, ComponentsStyles, PartialTheme, Theme } from './Theme'; export type { IEffects } from './IEffects'; export type { IFontStyles } from './IFontStyles'; export type { IPalette } from './IPalette'; diff --git a/scripts/dangerjs/src/detectNonApprovedDependencies/utils/index.ts b/scripts/dangerjs/src/detectNonApprovedDependencies/utils/index.ts index d216c533aa268..1705a9e6cab06 100644 --- a/scripts/dangerjs/src/detectNonApprovedDependencies/utils/index.ts +++ b/scripts/dangerjs/src/detectNonApprovedDependencies/utils/index.ts @@ -1,5 +1,5 @@ export { default as getVersionConstraints } from './getVersionConstraints'; export { default as getRuntimeDependencies } from './getRuntimeDependencies'; export { default as getFailedPackageVersionConstraints } from './getFailedPackageVersionConstraints'; -export * from './getFailedPackageVersionConstraints'; -export * from './packageNameUtils'; +export type { FailedConstraintsExplanation } from './getFailedPackageVersionConstraints'; +export { getPackageName, getPackageVersion } from './packageNameUtils'; diff --git a/scripts/github/src/index.ts b/scripts/github/src/index.ts index 2731c4643b3e6..b184f7ce143e1 100644 --- a/scripts/github/src/index.ts +++ b/scripts/github/src/index.ts @@ -1,3 +1,4 @@ -export * from './constants'; -export * from './pullRequests'; -export * from './types'; +export { fluentRepoDetails } from './constants'; +export type { IGetPullRequestFromCommitParams } from './pullRequests'; +export { getPullRequestForCommit, processPullRequestApiResponse } from './pullRequests'; +export type { IPullRequest, IRepoDetails, IUser } from './types'; From 9c716b2519ad2d135fb5d16a60ef6ee183a16e31 Mon Sep 17 00:00:00 2001 From: Robert Penner Date: Fri, 20 Dec 2024 15:23:35 -0500 Subject: [PATCH 10/24] refactor(MessageBar): migrate slide & fade to motion components (#33465) Co-authored-by: Oleksandr Fediashov --- ...-72abc821-ab32-4cac-8dd2-4c8dce4c810e.json | 7 ++ .../react-message-bar/library/package.json | 5 +- .../components/MessageBar/MessageBar.types.ts | 3 + .../components/MessageBar/useMessageBar.ts | 1 + .../MessageBar/useMessageBarStyles.styles.ts | 1 - .../MessageBarGroup.motions.tsx | 94 +++++++++++++++++++ .../MessageBarGroup/MessageBarGroup.types.ts | 2 + .../MessageBarGroup/MessageBarTransition.tsx | 71 -------------- .../MessageBarGroup/renderMessageBarGroup.tsx | 17 ++-- .../useMessageBarGroupStyles.styles.ts | 40 +------- .../contexts/messageBarTransitionContext.ts | 5 +- 11 files changed, 121 insertions(+), 125 deletions(-) create mode 100644 change/@fluentui-react-message-bar-72abc821-ab32-4cac-8dd2-4c8dce4c810e.json create mode 100644 packages/react-components/react-message-bar/library/src/components/MessageBarGroup/MessageBarGroup.motions.tsx delete mode 100644 packages/react-components/react-message-bar/library/src/components/MessageBarGroup/MessageBarTransition.tsx diff --git a/change/@fluentui-react-message-bar-72abc821-ab32-4cac-8dd2-4c8dce4c810e.json b/change/@fluentui-react-message-bar-72abc821-ab32-4cac-8dd2-4c8dce4c810e.json new file mode 100644 index 0000000000000..45370fc286bc2 --- /dev/null +++ b/change/@fluentui-react-message-bar-72abc821-ab32-4cac-8dd2-4c8dce4c810e.json @@ -0,0 +1,7 @@ +{ + "type": "minor", + "comment": "refactor(MessageBar): migrate slide & fade to motion components", + "packageName": "@fluentui/react-message-bar", + "email": "robertpenner@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/packages/react-components/react-message-bar/library/package.json b/packages/react-components/react-message-bar/library/package.json index f290113045fe5..f4091aa19bfce 100644 --- a/packages/react-components/react-message-bar/library/package.json +++ b/packages/react-components/react-message-bar/library/package.json @@ -21,13 +21,14 @@ "@fluentui/react-button": "^9.3.98", "@fluentui/react-icons": "^2.0.245", "@fluentui/react-jsx-runtime": "^9.0.48", + "@fluentui/react-motion": "^9.6.4", + "@fluentui/react-motion-components-preview": "^0.4.0", "@fluentui/react-shared-contexts": "^9.21.2", "@fluentui/react-link": "^9.3.5", "@fluentui/react-theme": "^9.1.24", "@fluentui/react-utilities": "^9.18.19", "@griffel/react": "^1.5.22", - "@swc/helpers": "^0.5.1", - "react-transition-group": "^4.4.1" + "@swc/helpers": "^0.5.1" }, "peerDependencies": { "@types/react": ">=16.8.0 <19.0.0", diff --git a/packages/react-components/react-message-bar/library/src/components/MessageBar/MessageBar.types.ts b/packages/react-components/react-message-bar/library/src/components/MessageBar/MessageBar.types.ts index ac8dbb62040ee..95b0ee35ccf3d 100644 --- a/packages/react-components/react-message-bar/library/src/components/MessageBar/MessageBar.types.ts +++ b/packages/react-components/react-message-bar/library/src/components/MessageBar/MessageBar.types.ts @@ -48,5 +48,8 @@ export type MessageBarProps = ComponentProps & export type MessageBarState = ComponentState & Required> & Pick & { + /** + * @deprecated Code is unused, replaced by motion components + */ transitionClassName: string; }; diff --git a/packages/react-components/react-message-bar/library/src/components/MessageBar/useMessageBar.ts b/packages/react-components/react-message-bar/library/src/components/MessageBar/useMessageBar.ts index cb2e0e7f1bc25..1c6145749da4f 100644 --- a/packages/react-components/react-message-bar/library/src/components/MessageBar/useMessageBar.ts +++ b/packages/react-components/react-message-bar/library/src/components/MessageBar/useMessageBar.ts @@ -21,6 +21,7 @@ export const useMessageBar_unstable = (props: MessageBarProps, ref: React.Ref(null); const bodyRef = React.useRef(null); diff --git a/packages/react-components/react-message-bar/library/src/components/MessageBar/useMessageBarStyles.styles.ts b/packages/react-components/react-message-bar/library/src/components/MessageBar/useMessageBarStyles.styles.ts index 1a9f754e95e4f..7a27836250873 100644 --- a/packages/react-components/react-message-bar/library/src/components/MessageBar/useMessageBarStyles.styles.ts +++ b/packages/react-components/react-message-bar/library/src/components/MessageBar/useMessageBarStyles.styles.ts @@ -114,7 +114,6 @@ export const useMessageBarStyles_unstable = (state: MessageBarState): MessageBar state.layout === 'multiline' && styles.rootMultiline, state.shape === 'square' && styles.square, rootIntentStyles[state.intent], - state.transitionClassName, state.root.className, ); diff --git a/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/MessageBarGroup.motions.tsx b/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/MessageBarGroup.motions.tsx new file mode 100644 index 0000000000000..3df0dab15d137 --- /dev/null +++ b/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/MessageBarGroup.motions.tsx @@ -0,0 +1,94 @@ +import { motionTokens, createPresenceComponent, PresenceDirection, AtomMotion } from '@fluentui/react-motion'; +import { MessageBarGroupProps } from './MessageBarGroup.types'; + +// TODO: import these atoms from react-motion-components-preview once they're available there + +interface FadeAtomParams { + direction: PresenceDirection; + duration: number; + easing?: string; + fromValue?: number; +} + +/** + * Generates a motion atom object for a fade in or fade out. + * @param direction - The functional direction of the motion: 'enter' or 'exit'. + * @param duration - The duration of the motion in milliseconds. + * @param easing - The easing curve for the motion. Defaults to `motionTokens.curveLinear`. + * @param fromValue - The starting opacity value. Defaults to 0. + * @returns A motion atom object with opacity keyframes and the supplied duration and easing. + */ +const fadeAtom = ({ + direction, + duration, + easing = motionTokens.curveLinear, + fromValue = 0, +}: FadeAtomParams): AtomMotion => { + const keyframes = [{ opacity: fromValue }, { opacity: 1 }]; + if (direction === 'exit') { + keyframes.reverse(); + } + return { + keyframes, + duration, + easing, + }; +}; + +/** + * Generates a motion atom object for an X or Y translation, from a specified distance to zero. + * @param direction - The functional direction of the motion: 'enter' or 'exit'. + * @param axis - The axis of the translation: 'X' or 'Y'. + * @param fromValue - The starting position of the slide; it can be a percentage or pixels. + * @param duration - The duration of the motion in milliseconds. + * @param easing - The easing curve for the motion. Defaults to `motionTokens.curveDecelerateMid`. + */ +const slideAtom = ({ + direction, + axis, + fromValue, + duration, + easing = motionTokens.curveDecelerateMid, +}: { + direction: PresenceDirection; + axis: 'X' | 'Y'; + fromValue: string; + duration: number; + easing?: string; +}): AtomMotion => { + const keyframes = [{ transform: `translate${axis}(${fromValue})` }, { transform: `translate${axis}(0)` }]; + if (direction === 'exit') { + keyframes.reverse(); + } + return { + keyframes, + duration, + easing, + }; +}; + +/** + * A presence component for a MessageBar to enter and exit from a MessageBarGroup. + * It has an optional enter transition of a slide-in and fade-in, + * when the `animate` prop is set to `'both'`. + * It always has an exit transition of a fade-out. + */ +export const MessageBarMotion = createPresenceComponent<{ animate?: MessageBarGroupProps['animate'] }>( + ({ animate }) => { + const duration = motionTokens.durationGentle; + + return { + enter: + animate === 'both' + ? // enter with slide and fade + [ + fadeAtom({ direction: 'enter', duration }), + slideAtom({ direction: 'enter', axis: 'Y', fromValue: '-100%', duration }), + ] + : [], // no enter motion + + // Always exit with a fade + exit: fadeAtom({ direction: 'exit', duration }), + }; + }, +); diff --git a/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/MessageBarGroup.types.ts b/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/MessageBarGroup.types.ts index dc0cbc00b1a75..3892ffb59ac5c 100644 --- a/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/MessageBarGroup.types.ts +++ b/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/MessageBarGroup.types.ts @@ -18,7 +18,9 @@ export type MessageBarGroupProps = ComponentProps & { */ export type MessageBarGroupState = ComponentState & Pick & { + /** @deprecated property is unused; these CSS animations were replaced by motion components */ enterStyles: string; + /** @deprecated property is unused; these CSS animations were replaced by motion components */ exitStyles: string; children: React.ReactElement[]; }; diff --git a/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/MessageBarTransition.tsx b/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/MessageBarTransition.tsx deleted file mode 100644 index a6e5c4ab95794..0000000000000 --- a/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/MessageBarTransition.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import * as React from 'react'; -import { Transition, TransitionStatus } from 'react-transition-group'; -import { MessageBarTransitionContextProvider } from '../../contexts/messageBarTransitionContext'; -import { MessageBarGroupProps } from './MessageBarGroup.types'; - -const getClassName = ( - status: TransitionStatus, - enterClassName: string, - exitClassName: string, - animate: MessageBarGroupProps['animate'], -) => { - switch (status) { - case 'entering': - case 'entered': - return animate === 'both' ? enterClassName : ''; - case 'exiting': - case 'exited': - return exitClassName; - default: - return ''; - } -}; - -/** - * Internal component that controls the animation transition for MessageBar components - * @internal - */ -export const MessageBarTransition: React.FC<{ - children: React.ReactElement; - enterClassName: string; - exitClassName: string; - animate: MessageBarGroupProps['animate']; -}> = ({ children, enterClassName, exitClassName, animate, ...rest }) => { - const nodeRef = React.useRef(null); - - return ( - - {state => ( - - {children} - - )} - - ); -}; - -const MessageBarTransitionInner: React.FC<{ - children: React.ReactElement; - enterClassName: string; - exitClassName: string; - animate: MessageBarGroupProps['animate']; - nodeRef: React.Ref; - state: TransitionStatus; -}> = ({ children, state, enterClassName, exitClassName, animate, nodeRef }) => { - const className = getClassName(state, enterClassName, exitClassName, animate); - const context = React.useMemo( - () => ({ - className, - nodeRef, - }), - [className, nodeRef], - ); - - return {children}; -}; diff --git a/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/renderMessageBarGroup.tsx b/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/renderMessageBarGroup.tsx index ddd4c6d29760d..70e62632523c6 100644 --- a/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/renderMessageBarGroup.tsx +++ b/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/renderMessageBarGroup.tsx @@ -3,8 +3,8 @@ import { assertSlots } from '@fluentui/react-utilities'; import type { MessageBarGroupState, MessageBarGroupSlots } from './MessageBarGroup.types'; -import { TransitionGroup } from 'react-transition-group'; -import { MessageBarTransition } from './MessageBarTransition'; +import { PresenceGroup } from '@fluentui/react-motion'; +import { MessageBarMotion } from './MessageBarGroup.motions'; /** * Render the final JSX of MessageBarGroup @@ -14,18 +14,13 @@ export const renderMessageBarGroup_unstable = (state: MessageBarGroupState) => { return ( - + {state.children.map(child => ( - + {child} - + ))} - + ); }; diff --git a/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/useMessageBarGroupStyles.styles.ts b/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/useMessageBarGroupStyles.styles.ts index a7054fe773448..bdc96b5d9e631 100644 --- a/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/useMessageBarGroupStyles.styles.ts +++ b/packages/react-components/react-message-bar/library/src/components/MessageBarGroup/useMessageBarGroupStyles.styles.ts @@ -1,5 +1,4 @@ -import { makeStyles, mergeClasses } from '@griffel/react'; -import { tokens } from '@fluentui/react-theme'; +import { mergeClasses } from '@griffel/react'; import type { SlotClassNames } from '@fluentui/react-utilities'; import type { MessageBarGroupSlots, MessageBarGroupState } from './MessageBarGroup.types'; @@ -7,49 +6,12 @@ export const messageBarGroupClassNames: SlotClassNames = { root: 'fui-MessageBarGroup', }; -/** - * Styles for the root slot - */ -const useStyles = makeStyles({ - base: { - animationFillMode: 'forwards', - animationDuration: tokens.durationNormal, - }, - - enter: { - animationName: { - from: { - opacity: 0, - transform: 'translateY(-100%)', - }, - to: { - opacity: 1, - transform: 'translateY(0)', - }, - }, - }, - - exit: { - animationName: { - from: { - opacity: 1, - }, - to: { - opacity: 0, - }, - }, - }, -}); - /** * Apply styling to the MessageBarGroup slots based on the state */ export const useMessageBarGroupStyles_unstable = (state: MessageBarGroupState): MessageBarGroupState => { 'use no memo'; - const styles = useStyles(); state.root.className = mergeClasses(messageBarGroupClassNames.root, state.root.className); - state.enterStyles = mergeClasses(styles.base, styles.enter); - state.exitStyles = mergeClasses(styles.base, styles.exit); return state; }; diff --git a/packages/react-components/react-message-bar/library/src/contexts/messageBarTransitionContext.ts b/packages/react-components/react-message-bar/library/src/contexts/messageBarTransitionContext.ts index 0a023b4b0e46c..5c1dea8f74f58 100644 --- a/packages/react-components/react-message-bar/library/src/contexts/messageBarTransitionContext.ts +++ b/packages/react-components/react-message-bar/library/src/contexts/messageBarTransitionContext.ts @@ -1,6 +1,9 @@ import * as React from 'react'; export type MessageBarTransitionContextValue = { + /** + * @deprecated CSS className is no longer used for this transition, replaced by motion components + */ className: string; nodeRef: React.Ref; }; @@ -16,7 +19,7 @@ export const messageBarTransitionContextDefaultValue: MessageBarTransitionContex }; /** - * Context to pass animation className to MessageBar components + * Context to pass nodeRef for animation to MessageBar components * @internal */ export const MessageBarTransitionContextProvider = messageBarTransitionContext.Provider; From 622c4aacdb5a1ab601287a9adb1064a640388f4f Mon Sep 17 00:00:00 2001 From: John Kreitlow <863023+radium-v@users.noreply.github.com> Date: Fri, 20 Dec 2024 12:33:04 -0800 Subject: [PATCH 11/24] fix(web-components): tooltip positioning style for 'below-end' option (#33494) --- ...-f87a2b96-d977-4138-8cb9-8cad4b13d8a8.json | 7 + .../src/tooltip/tooltip.stories.ts | 285 +++++++++++------- .../src/tooltip/tooltip.styles.ts | 3 +- 3 files changed, 187 insertions(+), 108 deletions(-) create mode 100644 change/@fluentui-web-components-f87a2b96-d977-4138-8cb9-8cad4b13d8a8.json diff --git a/change/@fluentui-web-components-f87a2b96-d977-4138-8cb9-8cad4b13d8a8.json b/change/@fluentui-web-components-f87a2b96-d977-4138-8cb9-8cad4b13d8a8.json new file mode 100644 index 0000000000000..f9cd17c85f0c5 --- /dev/null +++ b/change/@fluentui-web-components-f87a2b96-d977-4138-8cb9-8cad4b13d8a8.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "fix tooltip positioning styles for 'below-end' option", + "packageName": "@fluentui/web-components", + "email": "863023+radium-v@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/packages/web-components/src/tooltip/tooltip.stories.ts b/packages/web-components/src/tooltip/tooltip.stories.ts index 29040e851e0bd..9a1de32d562e7 100644 --- a/packages/web-components/src/tooltip/tooltip.stories.ts +++ b/packages/web-components/src/tooltip/tooltip.stories.ts @@ -1,27 +1,31 @@ -import { html, render, repeat } from '@microsoft/fast-element'; +import { css, html, repeat } from '@microsoft/fast-element'; import { uniqueId } from '@microsoft/fast-web-utilities'; -import { Meta, renderComponent, Story } from '../helpers.stories.js'; +import { type Meta, renderComponent, type StoryArgs, type StoryObj } from '../helpers.stories.js'; import { definition } from './tooltip.definition.js'; -import { Tooltip } from './tooltip.js'; +import type { Tooltip as FluentTooltip } from './tooltip.js'; import { TooltipPositioningOption } from './tooltip.options.js'; -const storyTemplate = () => { - const id = uniqueId('anchor-'); +type Story = StoryObj; - return html` -
- Hover me - - ${story => story.slottedContent?.()} - -
- `; -}; +const tooltipTemplate = html>` + + ${story => story.slottedContent?.()} + +`; + +const storyTemplate = html>` + Hover me + ${tooltipTemplate} +`; export default { title: 'Components/Tooltip', component: definition.name, - render: renderComponent(storyTemplate()), + render: renderComponent(storyTemplate), argTypes: { anchor: { description: 'The target element for the tooltip to anchor on', @@ -48,105 +52,172 @@ export default { }, }, }, -} as unknown as Meta; - -export const Default: Story = args => { - return renderComponent(html`${render(args, storyTemplate)}`)(args); -}; -Default.args = { - slottedContent: () => html`Really long tooltip content goes here. lorem ipsum dolor sit amet.`, -}; +} as Meta; -const iconArrowRight = (rotation = 0) => html` - -`; - -const iconArrowLeft = (rotation = 0) => html` - -`; +export const Default: Story = { + args: { + slottedContent: () => 'Really long tooltip content goes here. Lorem ipsum dolor sit amet.', + }, + decorators: [ + (Story, { canvasElement }) => { + const story = Story() as DocumentFragment; + const id = uniqueId('anchor-'); + const link = story.querySelector('fluent-link'); + link?.setAttribute('id', link.id || id); -const iconArrowUp = (rotation = 0) => html` - -`; + const tooltip = story.querySelector('fluent-tooltip'); + tooltip?.setAttribute('anchor', tooltip.anchor || id); -const glyphs = { - 'above-start': iconArrowRight(-90), - above: iconArrowUp(), - 'above-end': iconArrowLeft(90), - 'below-start': iconArrowLeft(-90), - below: iconArrowUp(180), - 'below-end': iconArrowRight(90), - 'before-top': iconArrowLeft(0), - before: iconArrowUp(-90), - 'before-bottom': iconArrowRight(180), - 'after-top': iconArrowRight(), - after: iconArrowUp(90), - 'after-bottom': iconArrowLeft(180), + canvasElement.style.textAlign = 'center'; + return story; + }, + ], }; -const positionButtonTemplate = html` - - ${x => glyphs[x.id as keyof typeof glyphs]} - -`; +export const Positioning: Story = { + render: renderComponent(html>` + ${repeat( + [ + { + href: '#arrow-step-back-20-regular', + id: 'above-start', + positioning: 'above-start', + transform: 'rotate(-90deg) scaleX(-1)', + slottedContent: () => 'above-start', + }, + { + href: '#arrow-step-out-20-regular', + id: 'above', + positioning: 'above', + transform: 'rotate(0deg)', + slottedContent: () => 'above', + }, + { + href: '#arrow-step-back-20-regular', + id: 'above-end', + positioning: 'above-end', + transform: 'rotate(90deg)', + slottedContent: () => 'above-end', + }, + { + href: '#arrow-step-back-20-regular', + id: 'before-top', + positioning: 'before-top', + transform: 'rotate(0deg)', + slottedContent: () => 'before-top', + }, + { + href: '#arrow-step-out-20-regular', + id: 'before', + positioning: 'before', + transform: 'rotate(-90deg)', + slottedContent: () => 'before', + }, + { + href: '#arrow-step-back-20-regular', + id: 'before-bottom', + positioning: 'before-bottom', + transform: 'rotate(180deg) scaleX(-1)', + slottedContent: () => 'before-bottom', + }, + { + href: '#arrow-step-back-20-regular', + id: 'after-top', + positioning: 'after-top', + transform: 'rotate(0deg) scaleX(-1)', + slottedContent: () => 'after-top', + }, + { + href: '#arrow-step-out-20-regular', + id: 'after', + positioning: 'after', + transform: 'rotate(90deg)', + slottedContent: () => 'after', + }, + { + href: '#arrow-step-back-20-regular', + id: 'after-bottom', + positioning: 'after-bottom', + transform: 'rotate(180deg)', + slottedContent: () => 'after-bottom', + }, + { + href: '#arrow-step-back-20-regular', + id: 'below-start', + positioning: 'below-start', + transform: 'rotate(-90deg)', + slottedContent: () => 'below-start', + }, + { + href: '#arrow-step-out-20-regular', + id: 'below', + positioning: 'below', + transform: 'rotate(180deg)', + slottedContent: () => 'below', + }, + { + href: '#arrow-step-back-20-regular', + id: 'below-end', + positioning: 'below-end', + transform: 'rotate(90deg) scaleX(-1)', + slottedContent: () => 'below-end', + }, + ], -const positionTooltipTemplate = html` - ${x => x.id} -`; + html` + + + + ${tooltipTemplate} + `, + )} + `), + decorators: [ + (Story, context) => { + const { args, canvasElement } = context; + const story = Story() as DocumentFragment; -export const Positioning: Story = renderComponent(html` -
- -
${repeat(x => x.storyItems, positionButtonTemplate)}
+ const styles = css` + .grid { + display: grid; + margin: auto; + gap: 4px; + width: min-content; + grid-template-areas: + '. above-start above above-end .' + 'before-top . . . after-top' + 'before . . . after' + 'before-bottom . . . after-bottom' + '. below-start below below-end .'; + } + `; + styles.addStylesTo(canvasElement); + canvasElement.classList.add('grid'); - ${repeat(x => x.storyItems, positionTooltipTemplate)} -
-`).bind({}); + // Rendering the sprite sheet here prevents it from being included in the code snippet + html` + + + + + + + + + `.render(args, story); -Positioning.args = { - storyItems: Object.keys(TooltipPositioningOption).map(id => ({ id })), + return story; + }, + ], }; diff --git a/packages/web-components/src/tooltip/tooltip.styles.ts b/packages/web-components/src/tooltip/tooltip.styles.ts index 3b9327aaabd37..70fc8548ecab6 100644 --- a/packages/web-components/src/tooltip/tooltip.styles.ts +++ b/packages/web-components/src/tooltip/tooltip.styles.ts @@ -45,6 +45,7 @@ export const styles = css` line-height: ${lineHeightBase200}; margin: unset; /* Remove browser default for [popover] */ max-width: 240px; + overflow: visible; padding: 4px ${spacingHorizontalMNudge} 6px; position: absolute; position-area: var(--position-area); @@ -85,7 +86,7 @@ export const styles = css` --position-area: ${TooltipPositioningOption.below}; } :host([positioning='below-end']) { - --position-area: ${TooltipPositioningOption.below}; + --position-area: ${TooltipPositioningOption['below-end']}; } :host([positioning='before-top']) { --position-area: ${TooltipPositioningOption['before-top']}; From 1cbd8b7fce7aeeca6ea7dea62c38e086694f6915 Mon Sep 17 00:00:00 2001 From: Fluent UI Build Date: Mon, 23 Dec 2024 04:08:12 +0000 Subject: [PATCH 12/24] release: applying package updates - web-components --- ...ents-f87a2b96-d977-4138-8cb9-8cad4b13d8a8.json | 7 ------- .../react-message-bar/library/package.json | 4 ++-- packages/web-components/CHANGELOG.json | 15 +++++++++++++++ packages/web-components/CHANGELOG.md | 11 ++++++++++- packages/web-components/package.json | 2 +- 5 files changed, 28 insertions(+), 11 deletions(-) delete mode 100644 change/@fluentui-web-components-f87a2b96-d977-4138-8cb9-8cad4b13d8a8.json diff --git a/change/@fluentui-web-components-f87a2b96-d977-4138-8cb9-8cad4b13d8a8.json b/change/@fluentui-web-components-f87a2b96-d977-4138-8cb9-8cad4b13d8a8.json deleted file mode 100644 index f9cd17c85f0c5..0000000000000 --- a/change/@fluentui-web-components-f87a2b96-d977-4138-8cb9-8cad4b13d8a8.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "prerelease", - "comment": "fix tooltip positioning styles for 'below-end' option", - "packageName": "@fluentui/web-components", - "email": "863023+radium-v@users.noreply.github.com", - "dependentChangeType": "patch" -} diff --git a/packages/react-components/react-message-bar/library/package.json b/packages/react-components/react-message-bar/library/package.json index f4091aa19bfce..4fd78689ddb5a 100644 --- a/packages/react-components/react-message-bar/library/package.json +++ b/packages/react-components/react-message-bar/library/package.json @@ -21,8 +21,8 @@ "@fluentui/react-button": "^9.3.98", "@fluentui/react-icons": "^2.0.245", "@fluentui/react-jsx-runtime": "^9.0.48", - "@fluentui/react-motion": "^9.6.4", - "@fluentui/react-motion-components-preview": "^0.4.0", + "@fluentui/react-motion": "^9.6.5", + "@fluentui/react-motion-components-preview": "^0.4.1", "@fluentui/react-shared-contexts": "^9.21.2", "@fluentui/react-link": "^9.3.5", "@fluentui/react-theme": "^9.1.24", diff --git a/packages/web-components/CHANGELOG.json b/packages/web-components/CHANGELOG.json index 2265505fd7569..b815e91343186 100644 --- a/packages/web-components/CHANGELOG.json +++ b/packages/web-components/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/web-components", "entries": [ + { + "date": "Mon, 23 Dec 2024 04:07:55 GMT", + "tag": "@fluentui/web-components_v3.0.0-beta.75", + "version": "3.0.0-beta.75", + "comments": { + "prerelease": [ + { + "author": "863023+radium-v@users.noreply.github.com", + "package": "@fluentui/web-components", + "commit": "622c4aacdb5a1ab601287a9adb1064a640388f4f", + "comment": "fix tooltip positioning styles for 'below-end' option" + } + ] + } + }, { "date": "Fri, 06 Dec 2024 04:07:47 GMT", "tag": "@fluentui/web-components_v3.0.0-beta.74", diff --git a/packages/web-components/CHANGELOG.md b/packages/web-components/CHANGELOG.md index 53250ca589424..c166b3f8f9394 100644 --- a/packages/web-components/CHANGELOG.md +++ b/packages/web-components/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/web-components -This log was last generated on Fri, 06 Dec 2024 04:07:47 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 04:07:55 GMT and should not be manually modified. +## [3.0.0-beta.75](https://github.com/microsoft/fluentui/tree/@fluentui/web-components_v3.0.0-beta.75) + +Mon, 23 Dec 2024 04:07:55 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/web-components_v3.0.0-beta.74..@fluentui/web-components_v3.0.0-beta.75) + +### Changes + +- fix tooltip positioning styles for 'below-end' option ([PR #33494](https://github.com/microsoft/fluentui/pull/33494) by 863023+radium-v@users.noreply.github.com) + ## [3.0.0-beta.74](https://github.com/microsoft/fluentui/tree/@fluentui/web-components_v3.0.0-beta.74) Fri, 06 Dec 2024 04:07:47 GMT diff --git a/packages/web-components/package.json b/packages/web-components/package.json index 7ecb89c6c89e4..489e639ac1b4b 100644 --- a/packages/web-components/package.json +++ b/packages/web-components/package.json @@ -1,7 +1,7 @@ { "name": "@fluentui/web-components", "description": "A library of Fluent Web Components", - "version": "3.0.0-beta.74", + "version": "3.0.0-beta.75", "author": { "name": "Microsoft", "url": "https://discord.gg/FcSNfg4" From 7b4a3785c6c1d7c207602cad0a1795e3df9122ee Mon Sep 17 00:00:00 2001 From: krkshitij <110246001+krkshitij@users.noreply.github.com> Date: Mon, 23 Dec 2024 10:27:09 +0530 Subject: [PATCH 13/24] feat(react-charting): add functionality to export chart as image (#33445) --- ...-8d924304-4078-4192-ba38-ec72171e24ca.json | 7 + .../react-charting/etc/react-charting.api.md | 31 ++ .../react-charting/src/DeclarativeChart.ts | 2 +- .../components/AreaChart/AreaChart.base.tsx | 21 +- .../CommonComponents/CartesianChart.base.tsx | 9 +- .../CommonComponents/CartesianChart.types.ts | 14 +- .../DeclarativeChart/DeclarativeChart.tsx | 69 ++++- .../DeclarativeChart/imageExporter.ts | 266 ++++++++++++++++++ .../src/components/DeclarativeChart/index.ts | 2 + .../components/DonutChart/DonutChart.base.tsx | 12 +- .../components/DonutChart/DonutChart.types.ts | 10 +- .../components/GaugeChart/GaugeChart.base.tsx | 11 +- .../components/GaugeChart/GaugeChart.types.ts | 10 +- .../GroupedVerticalBarChart.base.tsx | 28 +- .../HeatMapChart/HeatMapChart.base.tsx | 17 +- .../HorizontalBarChartWithAxis.base.tsx | 21 +- .../components/LineChart/LineChart.base.tsx | 22 +- .../SankeyChart/SankeyChart.base.tsx | 10 +- .../SankeyChart/SankeyChart.types.ts | 10 +- .../VerticalBarChart.base.tsx | 18 +- .../VerticalStackedBarChart.base.tsx | 28 +- packages/charts/react-charting/src/index.ts | 3 +- .../react-charting/src/types/IDataPoint.ts | 7 + .../DeclarativeChart.Basic.Example.tsx | 31 +- 24 files changed, 606 insertions(+), 53 deletions(-) create mode 100644 change/@fluentui-react-charting-8d924304-4078-4192-ba38-ec72171e24ca.json create mode 100644 packages/charts/react-charting/src/components/DeclarativeChart/imageExporter.ts create mode 100644 packages/charts/react-charting/src/components/DeclarativeChart/index.ts diff --git a/change/@fluentui-react-charting-8d924304-4078-4192-ba38-ec72171e24ca.json b/change/@fluentui-react-charting-8d924304-4078-4192-ba38-ec72171e24ca.json new file mode 100644 index 0000000000000..de5d1d1d7930c --- /dev/null +++ b/change/@fluentui-react-charting-8d924304-4078-4192-ba38-ec72171e24ca.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "feat: add functionality to export chart as image", + "packageName": "@fluentui/react-charting", + "email": "110246001+krkshitij@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/packages/charts/react-charting/etc/react-charting.api.md b/packages/charts/react-charting/etc/react-charting.api.md index 54135c0d0cea0..f07cb027b9303 100644 --- a/packages/charts/react-charting/etc/react-charting.api.md +++ b/packages/charts/react-charting/etc/react-charting.api.md @@ -12,6 +12,7 @@ import { IFocusZoneProps } from '@fluentui/react-focus'; import { IHoverCardStyleProps } from '@fluentui/react/lib/HoverCard'; import { IHoverCardStyles } from '@fluentui/react/lib/HoverCard'; import { IOverflowSetProps } from '@fluentui/react/lib/OverflowSet'; +import { IRefObject } from '@fluentui/react/lib/Utilities'; import { IRenderFunction } from '@fluentui/react/lib/Utilities'; import { IStyle } from '@fluentui/react/lib/Styling'; import { IStyle as IStyle_2 } from '@fluentui/react'; @@ -125,6 +126,7 @@ export const DeclarativeChart: React_2.FunctionComponent; // @public export interface DeclarativeChartProps extends React_2.RefAttributes { chartSchema: Schema; + componentRef?: IRefObject; onSchemaChange?: (eventData: Schema) => void; } @@ -267,6 +269,7 @@ export interface ICartesianChartProps { // @deprecated chartLabel?: string; className?: string; + componentRef?: IRefObject; customDateTimeFormatter?: (dateTime: Date) => string; dateLocalizeOptions?: Intl.DateTimeFormatOptions; enabledLegendsWrapLines?: boolean; @@ -352,6 +355,12 @@ export interface ICartesianChartStyles { yAxis?: IStyle; } +// @public (undocumented) +export interface IChart { + // (undocumented) + chartContainer: HTMLElement | null; +} + // @public (undocumented) export interface IChartDataPoint { callOutAccessibilityData?: IAccessibilityProps; @@ -481,6 +490,12 @@ export interface IDataPoint { y: number; } +// @public (undocumented) +export interface IDeclarativeChart { + // (undocumented) + exportAsImage: (opts?: IImageExportOptions) => Promise; +} + // @public (undocumented) export interface IDonutChart { } @@ -488,6 +503,7 @@ export interface IDonutChart { // @public export interface IDonutChartProps extends ICartesianChartProps { calloutProps?: Partial; + componentRef?: IRefObject; culture?: string; data?: IChartProps; enableGradient?: boolean; @@ -536,6 +552,7 @@ export interface IGaugeChartProps { chartValue: number; chartValueFormat?: GaugeValueFormat | ((sweepFraction: [number, number]) => string); className?: string; + componentRef?: IRefObject; culture?: string; enableGradient?: boolean; height?: number; @@ -832,6 +849,18 @@ export interface IHorizontalDataPoint { y: number; } +// @public (undocumented) +export interface IImageExportOptions { + // (undocumented) + background?: string; + // (undocumented) + height?: number; + // (undocumented) + scale?: number; + // (undocumented) + width?: number; +} + // @public export interface ILegend { action?: VoidFunction; @@ -1068,6 +1097,7 @@ export interface IModifiedCartesianChartProps extends ICartesianChartProps { maxOfYVal?: number; onChartMouseLeave?: () => void; points: any; + ref?: IRefObject; showYAxisLables?: boolean; showYAxisLablesTooltip?: boolean; stringDatasetForYAxisDomain?: string[]; @@ -1200,6 +1230,7 @@ export interface ISankeyChartProps { borderColorsForNodes?: string[]; className?: string; colorsForNodes?: string[]; + componentRef?: IRefObject; data: IChartProps; enableReflow?: boolean; formatNumberOptions?: Intl.NumberFormatOptions; diff --git a/packages/charts/react-charting/src/DeclarativeChart.ts b/packages/charts/react-charting/src/DeclarativeChart.ts index dadcd45467913..ca97cd8fc995f 100644 --- a/packages/charts/react-charting/src/DeclarativeChart.ts +++ b/packages/charts/react-charting/src/DeclarativeChart.ts @@ -1 +1 @@ -export * from './components/DeclarativeChart/DeclarativeChart'; +export * from './components/DeclarativeChart/index'; diff --git a/packages/charts/react-charting/src/components/AreaChart/AreaChart.base.tsx b/packages/charts/react-charting/src/components/AreaChart/AreaChart.base.tsx index 686fe0babe863..578261e346084 100644 --- a/packages/charts/react-charting/src/components/AreaChart/AreaChart.base.tsx +++ b/packages/charts/react-charting/src/components/AreaChart/AreaChart.base.tsx @@ -3,7 +3,13 @@ import { max as d3Max, bisector } from 'd3-array'; import { pointer } from 'd3-selection'; import { select as d3Select } from 'd3-selection'; import { area as d3Area, stack as d3Stack, curveMonotoneX as d3CurveBasis, line as d3Line } from 'd3-shape'; -import { classNamesFunction, find, getId, memoizeFunction } from '@fluentui/react/lib/Utilities'; +import { + classNamesFunction, + find, + getId, + initializeComponentRef, + memoizeFunction, +} from '@fluentui/react/lib/Utilities'; import { IAccessibilityProps, CartesianChart, @@ -38,6 +44,7 @@ import { } from '../../utilities/index'; import { ILegend, Legends } from '../Legends/index'; import { DirectionalHint } from '@fluentui/react/lib/Callout'; +import { IChart } from '../../types/index'; const getClassNames = classNamesFunction(); @@ -82,7 +89,7 @@ export interface IAreaChartState extends IBasestate { activePoint: string; } -export class AreaChartBase extends React.Component { +export class AreaChartBase extends React.Component implements IChart { public static defaultProps: Partial = { useUTC: true, }; @@ -119,9 +126,13 @@ export class AreaChartBase extends React.Component; public constructor(props: IAreaChartProps) { super(props); + + initializeComponentRef(this); + this._createSet = memoizeFunction(this._createDataSet); this.state = { selectedLegend: props.legendProps?.selectedLegend ?? '', @@ -148,6 +159,7 @@ export class AreaChartBase extends React.Component { @@ -249,6 +262,10 @@ export class AreaChartBase extends React.Component(); const ChartHoverCard = React.lazy(() => @@ -63,9 +64,12 @@ export interface ICartesianChartState { * 2.Callout * 3.Fit parent Continer */ -export class CartesianChartBase extends React.Component { +export class CartesianChartBase + extends React.Component + implements IChart +{ + public chartContainer: HTMLDivElement; private _classNames: IProcessedStyleSet; - private chartContainer: HTMLDivElement; private legendContainer: HTMLDivElement; private minLegendContainerHeight: number = 32; private xAxisElement: SVGSVGElement | null; @@ -619,6 +623,7 @@ export class CartesianChartBase extends React.Component ); } + /** * Dedicated function to return the Callout JSX Element , which can further be used to only call this when * only the calloutprops and charthover props changes. diff --git a/packages/charts/react-charting/src/components/CommonComponents/CartesianChart.types.ts b/packages/charts/react-charting/src/components/CommonComponents/CartesianChart.types.ts index 227d38446e64e..d9363dd636742 100644 --- a/packages/charts/react-charting/src/components/CommonComponents/CartesianChart.types.ts +++ b/packages/charts/react-charting/src/components/CommonComponents/CartesianChart.types.ts @@ -1,5 +1,5 @@ import * as React from 'react'; -import { IStyleFunctionOrObject } from '@fluentui/react/lib/Utilities'; +import { IRefObject, IStyleFunctionOrObject } from '@fluentui/react/lib/Utilities'; import { ITheme, IStyle } from '@fluentui/react/lib/Styling'; import { IOverflowSetProps } from '@fluentui/react/lib/OverflowSet'; import { IFocusZoneProps, FocusZoneDirection } from '@fluentui/react-focus'; @@ -7,6 +7,7 @@ import { ICalloutProps } from '@fluentui/react/lib/Callout'; import { ILegendsProps } from '../Legends/index'; import { IAccessibilityProps, + IChart, IDataPoint, IGroupedVerticalBarChartData, IHeatMapChartDataPoint, @@ -445,6 +446,12 @@ export interface ICartesianChartProps { * Used for enabling negative values in Y axis. */ supportNegativeData?: boolean; + + /** + * Optional callback to access the IChart interface. Use this instead of ref for accessing + * the public methods and properties of the component. + */ + componentRef?: IRefObject; } export interface IYValueHover { @@ -690,4 +697,9 @@ export interface IModifiedCartesianChartProps extends ICartesianChartProps { isRtl: boolean, barWidth: number | undefined, ) => ScaleBand; + + /** + * Callback to access the public methods and properties of the component. + */ + ref?: IRefObject; } diff --git a/packages/charts/react-charting/src/components/DeclarativeChart/DeclarativeChart.tsx b/packages/charts/react-charting/src/components/DeclarativeChart/DeclarativeChart.tsx index c75490160da75..9929b993f178a 100644 --- a/packages/charts/react-charting/src/components/DeclarativeChart/DeclarativeChart.tsx +++ b/packages/charts/react-charting/src/components/DeclarativeChart/DeclarativeChart.tsx @@ -1,6 +1,8 @@ /* eslint-disable @typescript-eslint/naming-convention */ /* eslint-disable @typescript-eslint/no-explicit-any */ import * as React from 'react'; +import { useTheme } from '@fluentui/react'; +import { IRefObject } from '@fluentui/react/lib/Utilities'; import { DonutChart } from '../DonutChart/index'; import { VerticalStackedBarChart } from '../VerticalStackedBarChart/index'; import { @@ -24,12 +26,8 @@ import { SankeyChart } from '../SankeyChart/SankeyChart'; import { GaugeChart } from '../GaugeChart/index'; import { GroupedVerticalBarChart } from '../GroupedVerticalBarChart/index'; import { VerticalBarChart } from '../VerticalBarChart/index'; -import { useTheme } from '@fluentui/react/lib/Theme'; - -export const UseIsDarkTheme = (): boolean => { - const theme = useTheme(); - return theme?.isInverted ?? false; -}; +import { IImageExportOptions, toImage } from './imageExporter'; +import { IChart } from '../../types/index'; /** * DeclarativeChart schema. @@ -56,6 +54,19 @@ export interface DeclarativeChartProps extends React.RefAttributes void; + + /** + * Optional callback to access the IDeclarativeChart interface. Use this instead of ref for accessing + * the public methods and properties of the component. + */ + componentRef?: IRefObject; +} + +/** + * {@docCategory DeclarativeChart} + */ +export interface IDeclarativeChart { + exportAsImage: (opts?: IImageExportOptions) => Promise; } const useColorMapping = () => { @@ -77,7 +88,9 @@ export const DeclarativeChart: React.FunctionComponent = const isXDate = isDateArray(xValues); const isXNumber = isNumberArray(xValues); const colorMap = useColorMapping(); - const isDarkTheme = UseIsDarkTheme(); + const theme = useTheme(); + const isDarkTheme = theme?.isInverted ?? false; + const chartRef = React.useRef(null); const [activeLegends, setActiveLegends] = React.useState(selectedLegends ?? []); const onActiveLegendsChange = (keys: string[]) => { @@ -93,12 +106,31 @@ export const DeclarativeChart: React.FunctionComponent = ...(activeLegends.length > 0 && { selectedLegend: activeLegends[0] }), }; + const exportAsImage = React.useCallback( + (opts?: IImageExportOptions) => { + return toImage(chartRef.current?.chartContainer, { + background: theme.palette.white, + ...opts, + }); + }, + [theme], + ); + + React.useImperativeHandle( + props.componentRef, + () => ({ + exportAsImage, + }), + [exportAsImage], + ); + switch (data[0].type) { case 'pie': return ( ); case 'bar': @@ -108,6 +140,7 @@ export const DeclarativeChart: React.FunctionComponent = ); } else { @@ -116,6 +149,7 @@ export const DeclarativeChart: React.FunctionComponent = ); } @@ -123,6 +157,7 @@ export const DeclarativeChart: React.FunctionComponent = ); } @@ -134,6 +169,7 @@ export const DeclarativeChart: React.FunctionComponent = ); } @@ -145,6 +181,7 @@ export const DeclarativeChart: React.FunctionComponent = canSelectMultipleLegends: true, selectedLegends: activeLegends, }} + componentRef={chartRef} /> ); } @@ -152,18 +189,31 @@ export const DeclarativeChart: React.FunctionComponent = ); case 'heatmap': - return ; + return ( + + ); case 'sankey': - return ; + return ( + + ); case 'indicator': if (data?.[0]?.mode?.includes('gauge')) { return ( ); } @@ -173,6 +223,7 @@ export const DeclarativeChart: React.FunctionComponent = ); default: diff --git a/packages/charts/react-charting/src/components/DeclarativeChart/imageExporter.ts b/packages/charts/react-charting/src/components/DeclarativeChart/imageExporter.ts new file mode 100644 index 0000000000000..a51400a5582a2 --- /dev/null +++ b/packages/charts/react-charting/src/components/DeclarativeChart/imageExporter.ts @@ -0,0 +1,266 @@ +import { create as d3Create, select as d3Select, Selection } from 'd3-selection'; + +/** + * {@docCategory DeclarativeChart} + */ +export interface IImageExportOptions { + width?: number; + height?: number; + scale?: number; + background?: string; +} + +export function toImage(chartContainer?: HTMLElement | null, opts: IImageExportOptions = {}): Promise { + return new Promise((resolve, reject) => { + if (!chartContainer) { + return reject(new Error('Chart container is not defined')); + } + + try { + const background = opts.background || 'white'; + const svg = toSVG(chartContainer, background); + + const svgData = new XMLSerializer().serializeToString(svg.node); + const svgDataUrl = 'data:image/svg+xml;base64,' + btoa(unescapePonyfill(encodeURIComponent(svgData))); + + svgToPng(svgDataUrl, { + width: opts.width || svg.width, + height: opts.height || svg.height, + scale: opts.scale, + }) + .then(resolve) + .catch(reject); + } catch (err) { + return reject(err); + } + }); +} + +function toSVG(chartContainer: HTMLElement, background: string) { + const svg = chartContainer.querySelector('svg'); + if (!svg) { + throw new Error('SVG not found'); + } + + const { width: svgWidth, height: svgHeight } = svg.getBoundingClientRect(); + const classNames = new Set(); + const legendGroup = cloneLegendsToSVG(chartContainer, svgWidth, svgHeight, classNames); + const w1 = Math.max(svgWidth, legendGroup.width); + const h1 = svgHeight + legendGroup.height; + const clonedSvg = d3Select(svg.cloneNode(true) as SVGSVGElement) + .attr('width', null) + .attr('height', null) + .attr('viewBox', null); + + if (legendGroup.node) { + clonedSvg.append(() => legendGroup.node); + } + clonedSvg + .insert('rect', ':first-child') + .attr('x', 0) + .attr('y', 0) + .attr('width', w1) + .attr('height', h1) + .attr('fill', background); + + const svgElements = svg.getElementsByTagName('*'); + const styleSheets = document.styleSheets; + const styleRules: string[] = []; + + for (let i = svgElements.length - 1; i--; ) { + svgElements[i].classList.forEach(className => { + classNames.add(`.${className}`); + }); + } + + for (let i = 0; i < styleSheets.length; i++) { + const rules = styleSheets[i].cssRules; + for (let j = 0; j < rules.length; j++) { + if (rules[j].constructor.name === 'CSSStyleRule') { + const selectorText = (rules[j] as CSSStyleRule).selectorText; + const hasClassName = selectorText.split(' ').some(word => classNames.has(word)); + + if (hasClassName) { + styleRules.push(rules[j].cssText); + } + } + } + } + + const xmlDocument = new DOMParser().parseFromString('', 'image/svg+xml'); + const styleNode = xmlDocument.createCDATASection(styleRules.join(' ')); + clonedSvg.insert('defs', ':first-child').append('style').attr('type', 'text/css').node()!.appendChild(styleNode); + + clonedSvg.attr('width', w1).attr('height', h1).attr('viewBox', `0 0 ${w1} ${h1}`); + + return { + node: clonedSvg.node()!, + width: w1, + height: h1, + }; +} + +function cloneLegendsToSVG(chartContainer: HTMLElement, svgWidth: number, svgHeight: number, classNames: Set) { + const legendButtons = chartContainer.querySelectorAll(` + button[class^="legend-"], + [class^="legendContainer-"] div[class^="overflowIndicationTextStyle-"], + [class^="legendsContainer-"] div[class^="overflowIndicationTextStyle-"] + `); + if (legendButtons.length === 0) { + return { + node: null, + width: 0, + height: 0, + }; + } + + const legendGroup = d3Create('svg:g'); + let legendX = 0; + let legendY = 8; + let legendLine: Selection[] = []; + const legendLines: (typeof legendLine)[] = []; + const legendLineWidths: number[] = []; + + for (let i = 0; i < legendButtons.length; i++) { + const { width: legendWidth } = legendButtons[i].getBoundingClientRect(); + const legendItem = legendGroup.append('g'); + + legendLine.push(legendItem); + if (legendX + legendWidth > svgWidth && legendLine.length > 1) { + legendLine.pop(); + legendLines.push(legendLine); + legendLineWidths.push(legendX); + + legendLine = [legendItem]; + legendX = 0; + legendY += 32; + } + + let legendText: HTMLDivElement | null; + let textOffset = 0; + + if (legendButtons[i].tagName.toLowerCase() === 'button') { + const legendRect = legendButtons[i].querySelector('[class^="rect"]'); + const { backgroundColor: legendColor, borderColor: legendBorderColor } = getComputedStyle(legendRect!); + + legendText = legendButtons[i].querySelector('[class^="text"]'); + legendText!.classList.forEach(className => classNames.add(`.${className}`)); + legendItem + .append('rect') + .attr('x', legendX + 8) + .attr('y', svgHeight + legendY + 8) + .attr('width', 12) + .attr('height', 12) + .attr('fill', legendColor) + .attr('stroke-width', 1) + .attr('stroke', legendBorderColor); + textOffset = 28; + } else { + legendText = legendButtons[i] as HTMLDivElement; + legendText.classList.forEach(className => classNames.add(`.${className}`)); + textOffset = 8; + } + + legendItem + .append('text') + .attr('x', legendX + textOffset) + .attr('y', svgHeight + legendY + 8) + .attr('dominant-baseline', 'hanging') + .attr('class', legendText!.getAttribute('class')) + .text(legendText!.textContent); + legendX += legendWidth; + } + + legendLines.push(legendLine); + legendLineWidths.push(legendX); + legendY += 32; + + const centerLegends = true; + if (centerLegends) { + legendLines.forEach((ln, idx) => { + const offsetX = Math.max((svgWidth - legendLineWidths[idx]) / 2, 0); + ln.forEach(item => { + item.attr('transform', `translate(${offsetX}, 0)`); + }); + }); + } + + return { + node: legendGroup.node(), + width: Math.max(...legendLineWidths), + height: legendY, + }; +} + +function svgToPng(svgDataUrl: string, opts: IImageExportOptions = {}): Promise { + return new Promise((resolve, reject) => { + const scale = opts.scale || 1; + const w0 = opts.width || 300; + const h0 = opts.height || 150; + const w1 = scale * w0; + const h1 = scale * h0; + + const canvas = document.createElement('canvas'); + const img = new Image(); + + canvas.width = w1; + canvas.height = h1; + + img.onload = function () { + const ctx = canvas.getContext('2d'); + if (!ctx) { + return reject(new Error('Canvas context is null')); + } + + ctx.clearRect(0, 0, w1, h1); + ctx.drawImage(img, 0, 0, w1, h1); + + const imgData = canvas.toDataURL('image/png'); + resolve(imgData); + }; + + img.onerror = function (err) { + reject(err); + }; + + img.src = svgDataUrl; + }); +} + +const hex2 = /^[\da-f]{2}$/i; +const hex4 = /^[\da-f]{4}$/i; + +/** + * A ponyfill for the deprecated `unescape` method, taken from the `core-js` library. + * + * Source: {@link https://github.com/zloirock/core-js/blob/167136f479d3b8519953f2e4c534ecdd1031d3cf/packages/core-js/modules/es.unescape.js core-js/packages/core-js/modules/es.unescape.js} + */ +function unescapePonyfill(str: string) { + let result = ''; + const length = str.length; + let index = 0; + let chr; + let part; + while (index < length) { + chr = str.charAt(index++); + if (chr === '%') { + if (str.charAt(index) === 'u') { + part = str.slice(index + 1, index + 5); + if (hex4.exec(part)) { + result += String.fromCharCode(parseInt(part, 16)); + index += 5; + continue; + } + } else { + part = str.slice(index, index + 2); + if (hex2.exec(part)) { + result += String.fromCharCode(parseInt(part, 16)); + index += 2; + continue; + } + } + } + result += chr; + } + return result; +} diff --git a/packages/charts/react-charting/src/components/DeclarativeChart/index.ts b/packages/charts/react-charting/src/components/DeclarativeChart/index.ts new file mode 100644 index 0000000000000..64d5b58644526 --- /dev/null +++ b/packages/charts/react-charting/src/components/DeclarativeChart/index.ts @@ -0,0 +1,2 @@ +export * from './DeclarativeChart'; +export type { IImageExportOptions } from './imageExporter'; diff --git a/packages/charts/react-charting/src/components/DonutChart/DonutChart.base.tsx b/packages/charts/react-charting/src/components/DonutChart/DonutChart.base.tsx index e531b39dd3fe7..ff04507c955bb 100644 --- a/packages/charts/react-charting/src/components/DonutChart/DonutChart.base.tsx +++ b/packages/charts/react-charting/src/components/DonutChart/DonutChart.base.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { classNamesFunction, getId } from '@fluentui/react/lib/Utilities'; +import { classNamesFunction, getId, initializeComponentRef } from '@fluentui/react/lib/Utilities'; import { ScaleOrdinal } from 'd3-scale'; import { IProcessedStyleSet } from '@fluentui/react/lib/Styling'; import { Callout, DirectionalHint } from '@fluentui/react/lib/Callout'; @@ -9,6 +9,7 @@ import { Pie } from './Pie/index'; import { IChartDataPoint, IDonutChartProps, IDonutChartStyleProps, IDonutChartStyles } from './index'; import { getAccessibleDataObject, getColorFromToken, getNextColor, getNextGradient } from '../../utilities/index'; import { convertToLocaleString } from '../../utilities/locale-util'; +import { IChart } from '../../types/index'; const getClassNames = classNamesFunction(); const LEGEND_CONTAINER_HEIGHT = 40; @@ -29,7 +30,7 @@ export interface IDonutChartState { callOutAccessibilityData?: IAccessibilityProps; } -export class DonutChartBase extends React.Component { +export class DonutChartBase extends React.Component implements IChart { public static defaultProps: Partial = { innerRadius: 0, hideLabels: true, @@ -63,6 +64,9 @@ export class DonutChartBase extends React.Component { this.setState({ showHover: false, diff --git a/packages/charts/react-charting/src/components/DonutChart/DonutChart.types.ts b/packages/charts/react-charting/src/components/DonutChart/DonutChart.types.ts index ed1405d2aeca0..4adaaebb045af 100644 --- a/packages/charts/react-charting/src/components/DonutChart/DonutChart.types.ts +++ b/packages/charts/react-charting/src/components/DonutChart/DonutChart.types.ts @@ -1,8 +1,8 @@ import { IStyle } from '@fluentui/react/lib/Styling'; -import { IRenderFunction, IStyleFunctionOrObject } from '@fluentui/react/lib/Utilities'; +import { IRefObject, IRenderFunction, IStyleFunctionOrObject } from '@fluentui/react/lib/Utilities'; import { ICartesianChartProps, ICartesianChartStyleProps } from '../CommonComponents/index'; import { ICalloutProps } from '@fluentui/react/lib/Callout'; -import { IChartProps, IChartDataPoint } from './index'; +import { IChartProps, IChartDataPoint, IChart } from './index'; export interface IDonutChart {} @@ -69,6 +69,12 @@ export interface IDonutChartProps extends ICartesianChartProps { * @default false */ roundCorners?: boolean; + + /** + * Optional callback to access the IChart interface. Use this instead of ref for accessing + * the public methods and properties of the component. + */ + componentRef?: IRefObject; } /** diff --git a/packages/charts/react-charting/src/components/GaugeChart/GaugeChart.base.tsx b/packages/charts/react-charting/src/components/GaugeChart/GaugeChart.base.tsx index 87102b1ebacd3..2636bb56f3a97 100644 --- a/packages/charts/react-charting/src/components/GaugeChart/GaugeChart.base.tsx +++ b/packages/charts/react-charting/src/components/GaugeChart/GaugeChart.base.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { arc as d3Arc } from 'd3-shape'; -import { classNamesFunction, getId, getRTL } from '@fluentui/react/lib/Utilities'; +import { classNamesFunction, getId, getRTL, initializeComponentRef } from '@fluentui/react/lib/Utilities'; import { IGaugeChartProps, IGaugeChartSegment, @@ -26,6 +26,7 @@ import { Callout, DirectionalHint } from '@fluentui/react/lib/Callout'; import { IYValueHover } from '../../index'; import { SVGTooltipText } from '../../utilities/SVGTooltipText'; import { select as d3Select } from 'd3-selection'; +import { IChart } from '../../types/index'; const GAUGE_MARGIN = 16; const LABEL_WIDTH = 36; @@ -120,7 +121,7 @@ export interface IExtendedSegment extends IGaugeChartSegment { end: number; } -export class GaugeChartBase extends React.Component { +export class GaugeChartBase extends React.Component implements IChart { private _classNames: IProcessedStyleSet; private _isRTL: boolean; private _innerRadius: number; @@ -136,6 +137,8 @@ export class GaugeChartBase extends React.Component { const { hideMinMax, chartTitle, sublabel } = this.props; diff --git a/packages/charts/react-charting/src/components/GaugeChart/GaugeChart.types.ts b/packages/charts/react-charting/src/components/GaugeChart/GaugeChart.types.ts index 648dc7abeca07..9374a764dc3ca 100644 --- a/packages/charts/react-charting/src/components/GaugeChart/GaugeChart.types.ts +++ b/packages/charts/react-charting/src/components/GaugeChart/GaugeChart.types.ts @@ -1,7 +1,7 @@ import { IStyle, ITheme } from '@fluentui/react/lib/Styling'; -import { IStyleFunctionOrObject } from '@fluentui/react/lib/Utilities'; +import { IRefObject, IStyleFunctionOrObject } from '@fluentui/react/lib/Utilities'; import { ILegendsProps } from '../Legends/index'; -import { IAccessibilityProps } from '../../types/index'; +import { IAccessibilityProps, IChart } from '../../types/index'; import { ICalloutProps } from '@fluentui/react/lib/Callout'; /** @@ -168,6 +168,12 @@ export interface IGaugeChartProps { * @default false */ roundCorners?: boolean; + + /** + * Optional callback to access the IChart interface. Use this instead of ref for accessing + * the public methods and properties of the component. + */ + componentRef?: IRefObject; } /** diff --git a/packages/charts/react-charting/src/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.tsx b/packages/charts/react-charting/src/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.tsx index a35d3ff5b7065..3e3daa0f0731e 100644 --- a/packages/charts/react-charting/src/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.tsx +++ b/packages/charts/react-charting/src/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.tsx @@ -3,7 +3,14 @@ import { max as d3Max } from 'd3-array'; import { select as d3Select } from 'd3-selection'; import { Axis as D3Axis } from 'd3-axis'; import { scaleBand as d3ScaleBand, scaleLinear as d3ScaleLinear } from 'd3-scale'; -import { classNamesFunction, getId, getRTL, memoizeFunction, warnDeprecations } from '@fluentui/react/lib/Utilities'; +import { + classNamesFunction, + getId, + getRTL, + initializeComponentRef, + memoizeFunction, + warnDeprecations, +} from '@fluentui/react/lib/Utilities'; import { IProcessedStyleSet, IPalette } from '@fluentui/react/lib/Styling'; import { DirectionalHint } from '@fluentui/react/lib/Callout'; import { FocusZoneDirection } from '@fluentui/react-focus'; @@ -39,6 +46,7 @@ import { IRefArrayData, Legends, } from '../../index'; +import { IChart } from '../../types/index'; const COMPONENT_NAME = 'GROUPED VERTICAL BAR CHART'; const getClassNames = classNamesFunction(); @@ -67,10 +75,10 @@ export interface IGroupedVerticalBarChartState extends IBasestate { calloutLegend: string; } -export class GroupedVerticalBarChartBase extends React.Component< - IGroupedVerticalBarChartProps, - IGroupedVerticalBarChartState -> { +export class GroupedVerticalBarChartBase + extends React.Component + implements IChart +{ public static defaultProps: Partial = { maxBarWidth: 24, }; @@ -100,9 +108,13 @@ export class GroupedVerticalBarChartBase extends React.Component< private _groupWidth: number; private _xAxisInnerPadding: number; private _xAxisOuterPadding: number; + private _cartesianChartRef: React.RefObject; public constructor(props: IGroupedVerticalBarChartProps) { super(props); + + initializeComponentRef(this); + this._createSet = memoizeFunction((data: IGroupedVerticalBarChartData[]) => this._createDataSetOfGVBC(data)); this.state = { color: '', @@ -129,6 +141,7 @@ export class GroupedVerticalBarChartBase extends React.Component< this._tooltipId = getId('GVBCTooltipId_'); this._emptyChartId = getId('_GVBC_empty'); this._domainMargin = MIN_DOMAIN_MARGIN; + this._cartesianChartRef = React.createRef(); } public render(): React.ReactNode { @@ -203,6 +216,7 @@ export class GroupedVerticalBarChartBase extends React.Component< xAxisOuterPadding: this._xAxisOuterPadding, })} barwidth={this._barWidth} + ref={this._cartesianChartRef} /* eslint-disable react/jsx-no-bind */ children={() => { return {this._groupedVerticalBarGraph}; @@ -218,6 +232,10 @@ export class GroupedVerticalBarChartBase extends React.Component< ); } + public get chartContainer(): HTMLElement | null { + return this._cartesianChartRef.current?.chartContainer || null; + } + private _getMinMaxOfYAxis = () => { return { startValue: 0, endValue: 0 }; }; diff --git a/packages/charts/react-charting/src/components/HeatMapChart/HeatMapChart.base.tsx b/packages/charts/react-charting/src/components/HeatMapChart/HeatMapChart.base.tsx index 4aa3d4e2a2377..5a967214ceefc 100644 --- a/packages/charts/react-charting/src/components/HeatMapChart/HeatMapChart.base.tsx +++ b/packages/charts/react-charting/src/components/HeatMapChart/HeatMapChart.base.tsx @@ -1,7 +1,7 @@ import { CartesianChart, IChildProps, IModifiedCartesianChartProps } from '../../components/CommonComponents/index'; -import { IAccessibilityProps, IHeatMapChartData, IHeatMapChartDataPoint } from '../../types/IDataPoint'; +import { IAccessibilityProps, IChart, IHeatMapChartData, IHeatMapChartDataPoint } from '../../types/IDataPoint'; import { scaleLinear as d3ScaleLinear } from 'd3-scale'; -import { classNamesFunction, getId, memoizeFunction } from '@fluentui/react/lib/Utilities'; +import { classNamesFunction, getId, initializeComponentRef, memoizeFunction } from '@fluentui/react/lib/Utilities'; import { FocusZoneDirection } from '@fluentui/react-focus'; import { DirectionalHint } from '@fluentui/react/lib/Callout'; import { IProcessedStyleSet } from '@fluentui/react/lib/Styling'; @@ -87,7 +87,7 @@ export interface IHeatMapChartState { callOutAccessibilityData?: IAccessibilityProps; } const getClassNames = classNamesFunction(); -export class HeatMapChartBase extends React.Component { +export class HeatMapChartBase extends React.Component implements IChart { private _classNames: IProcessedStyleSet; private _stringXAxisDataPoints: string[]; private _stringYAxisDataPoints: string[]; @@ -114,8 +114,13 @@ export class HeatMapChartBase extends React.Component; + public constructor(props: IHeatMapChartProps) { super(props); + + initializeComponentRef(this); + /** * below funciton creates a new data set from the prop * @data and also finds all the unique x-axis datapoints @@ -145,6 +150,7 @@ export class HeatMapChartBase extends React.Component { @@ -231,6 +238,10 @@ export class HeatMapChartBase extends React.Component { return { startValue: 0, endValue: 0 }; }; diff --git a/packages/charts/react-charting/src/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.tsx b/packages/charts/react-charting/src/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.tsx index 8cb522e55edd4..c84654b03726c 100644 --- a/packages/charts/react-charting/src/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.tsx +++ b/packages/charts/react-charting/src/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { max as d3Max } from 'd3-array'; import { select as d3Select } from 'd3-selection'; import { scaleLinear as d3ScaleLinear, ScaleLinear as D3ScaleLinear, scaleBand as d3ScaleBand } from 'd3-scale'; -import { classNamesFunction, getId, getRTL } from '@fluentui/react/lib/Utilities'; +import { classNamesFunction, getId, getRTL, initializeComponentRef } from '@fluentui/react/lib/Utilities'; import { IProcessedStyleSet, IPalette } from '@fluentui/react/lib/Styling'; import { DirectionalHint } from '@fluentui/react/lib/Callout'; import { ILegend } from '../../components/Legends/Legends.types'; @@ -13,6 +13,7 @@ import { IHorizontalBarChartWithAxisDataPoint, IRefArrayData, IMargins, + IChart, } from '../../types/IDataPoint'; import { IChildProps, IYValueHover } from '../CommonComponents/CartesianChart.types'; import { CartesianChart } from '../CommonComponents/CartesianChart'; @@ -58,10 +59,10 @@ export interface IHorizontalBarChartWithAxisState extends IBasestate { type ColorScale = (_p?: number) => string; -export class HorizontalBarChartWithAxisBase extends React.Component< - IHorizontalBarChartWithAxisProps, - IHorizontalBarChartWithAxisState -> { +export class HorizontalBarChartWithAxisBase + extends React.Component + implements IChart +{ private _points: IHorizontalBarChartWithAxisDataPoint[]; private _barHeight: number; private _colors: string[]; @@ -77,9 +78,13 @@ export class HorizontalBarChartWithAxisBase extends React.Component< private _xAxisType: XAxisTypes; private _yAxisType: YAxisType; private _calloutAnchorPoint: IHorizontalBarChartWithAxisDataPoint | null; + private _cartesianChartRef: React.RefObject; public constructor(props: IHorizontalBarChartWithAxisProps) { super(props); + + initializeComponentRef(this); + this.state = { color: '', dataForHoverCard: 0, @@ -105,6 +110,7 @@ export class HorizontalBarChartWithAxisBase extends React.Component< this.props.data! && this.props.data!.length > 0 ? (getTypeOfAxis(this.props.data![0].y, false) as YAxisType) : YAxisType.StringAxis; + this._cartesianChartRef = React.createRef(); } public render(): JSX.Element { @@ -163,6 +169,7 @@ export class HorizontalBarChartWithAxisBase extends React.Component< getGraphData={this._getGraphData} getAxisData={this._getAxisData} onChartMouseLeave={this._handleChartMouseLeave} + ref={this._cartesianChartRef} /* eslint-disable react/jsx-no-bind */ children={(props: IChildProps) => { return ( @@ -175,6 +182,10 @@ export class HorizontalBarChartWithAxisBase extends React.Component< ); } + public get chartContainer(): HTMLElement | null { + return this._cartesianChartRef.current?.chartContainer || null; + } + private _getDomainNRangeValues = ( points: IHorizontalBarChartWithAxisDataPoint[], margins: IMargins, diff --git a/packages/charts/react-charting/src/components/LineChart/LineChart.base.tsx b/packages/charts/react-charting/src/components/LineChart/LineChart.base.tsx index 55c0370d59076..c0dcab6b52dc4 100644 --- a/packages/charts/react-charting/src/components/LineChart/LineChart.base.tsx +++ b/packages/charts/react-charting/src/components/LineChart/LineChart.base.tsx @@ -4,7 +4,14 @@ import { select as d3Select, pointer } from 'd3-selection'; import { bisector } from 'd3-array'; import { ILegend, Legends } from '../Legends/index'; import { line as d3Line, curveLinear as d3curveLinear } from 'd3-shape'; -import { classNamesFunction, getId, find, memoizeFunction, getRTL } from '@fluentui/react/lib/Utilities'; +import { + classNamesFunction, + getId, + find, + memoizeFunction, + getRTL, + initializeComponentRef, +} from '@fluentui/react/lib/Utilities'; import { IAccessibilityProps, CartesianChart, @@ -42,6 +49,7 @@ import { createStringYAxis, formatDate, } from '../../utilities/index'; +import { IChart } from '../../types/index'; type NumericAxis = D3Axis; const getClassNames = classNamesFunction(); @@ -146,7 +154,7 @@ export interface ILineChartState extends IBasestate { activeLine: number | null; } -export class LineChartBase extends React.Component { +export class LineChartBase extends React.Component implements IChart { public static defaultProps: Partial = { enableReflow: true, useUTC: true, @@ -178,9 +186,13 @@ export class LineChartBase extends React.Component; constructor(props: ILineChartProps) { super(props); + + initializeComponentRef(this); + this.state = { hoverXValue: '', activeLegend: '', @@ -210,6 +222,7 @@ export class LineChartBase extends React.Component this._createLegends(data)); this._firstRenderOptimization = true; this._emptyChartId = getId('_LineChart_empty'); + this._cartesianChartRef = React.createRef(); props.eventAnnotationProps && props.eventAnnotationProps.labelHeight && @@ -293,6 +306,7 @@ export class LineChartBase extends React.Component { @@ -349,6 +363,10 @@ export class LineChartBase extends React.Component { +export class SankeyChartBase extends React.Component implements IChart { public static defaultProps: Partial = { enableReflow: true, }; - private chartContainer: HTMLDivElement; + public chartContainer: HTMLDivElement; private _reqID: number; private readonly _calloutId: string; private readonly _linkId: string; @@ -628,6 +629,9 @@ export class SankeyChartBase extends React.Component; } /** diff --git a/packages/charts/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx b/packages/charts/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx index 9e793a25b87c6..0132072838762 100644 --- a/packages/charts/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx +++ b/packages/charts/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx @@ -9,7 +9,7 @@ import { scaleUtc as d3ScaleUtc, scaleTime as d3ScaleTime, } from 'd3-scale'; -import { classNamesFunction, getId, getRTL } from '@fluentui/react/lib/Utilities'; +import { classNamesFunction, getId, getRTL, initializeComponentRef } from '@fluentui/react/lib/Utilities'; import { IProcessedStyleSet, IPalette } from '@fluentui/react/lib/Styling'; import { DirectionalHint } from '@fluentui/react/lib/Callout'; import { @@ -53,6 +53,7 @@ import { formatDate, getNextGradient, } from '../../utilities/index'; +import { IChart } from '../../types/index'; enum CircleVisbility { show = 'visibility', @@ -76,7 +77,10 @@ export interface IVerticalBarChartState extends IBasestate { type ColorScale = (_p?: number) => string; -export class VerticalBarChartBase extends React.Component { +export class VerticalBarChartBase + extends React.Component + implements IChart +{ public static defaultProps: Partial = { maxBarWidth: 24, useUTC: true, @@ -102,9 +106,13 @@ export class VerticalBarChartBase extends React.Component; public constructor(props: IVerticalBarChartProps) { super(props); + + initializeComponentRef(this); + this.state = { color: '', dataForHoverCard: 0, @@ -129,6 +137,7 @@ export class VerticalBarChartBase extends React.Component { return ( @@ -230,6 +240,10 @@ export class VerticalBarChartBase extends React.Component(); type NumericAxis = D3Axis; @@ -94,10 +102,10 @@ export interface IVerticalStackedBarChartState extends IBasestate { callOutAccessibilityData?: IAccessibilityProps; calloutLegend: string; } -export class VerticalStackedBarChartBase extends React.Component< - IVerticalStackedBarChartProps, - IVerticalStackedBarChartState -> { +export class VerticalStackedBarChartBase + extends React.Component + implements IChart +{ public static defaultProps: Partial = { maxBarWidth: 24, useUTC: true, @@ -123,9 +131,13 @@ export class VerticalStackedBarChartBase extends React.Component< private _emptyChartId: string; private _xAxisInnerPadding: number; private _xAxisOuterPadding: number; + private _cartesianChartRef: React.RefObject; public constructor(props: IVerticalStackedBarChartProps) { super(props); + + initializeComponentRef(this); + this.state = { isCalloutVisible: false, selectedLegend: props.legendProps?.selectedLegend ?? '', @@ -154,6 +166,7 @@ export class VerticalStackedBarChartBase extends React.Component< this._createLegendsForLine = memoizeFunction((data: IVerticalStackedChartProps[]) => this._getLineLegends(data)); this._emptyChartId = getId('_VSBC_empty'); this._domainMargin = MIN_DOMAIN_MARGIN; + this._cartesianChartRef = React.createRef(); } public componentDidUpdate(prevProps: IVerticalStackedBarChartProps): void { @@ -238,6 +251,7 @@ export class VerticalStackedBarChartBase extends React.Component< xAxisInnerPadding: this._xAxisInnerPadding, xAxisOuterPadding: this._xAxisOuterPadding, })} + ref={this._cartesianChartRef} /* eslint-disable react/jsx-no-bind */ children={(props: IChildProps) => { return ( @@ -269,6 +283,10 @@ export class VerticalStackedBarChartBase extends React.Component< ); } + public get chartContainer(): HTMLElement | null { + return this._cartesianChartRef.current?.chartContainer || null; + } + /** * This function tells us what to focus either the whole stack as focusable item. * or each individual item in the stack as focusable item. basically it depends diff --git a/packages/charts/react-charting/src/index.ts b/packages/charts/react-charting/src/index.ts index c27c09d143045..2ae3660ac7f75 100644 --- a/packages/charts/react-charting/src/index.ts +++ b/packages/charts/react-charting/src/index.ts @@ -97,6 +97,7 @@ export type { IVerticalStackedChartProps, SLink, SNode, + IChart, } from './types/index'; export type { IChartHoverCardProps, @@ -135,7 +136,7 @@ export { DataVizPalette, getColorFromToken, getNextColor } from './utilities/col export { DataVizGradientPalette, getGradientFromToken, getNextGradient } from './utilities/gradients'; export type { IGaugeChartProps, IGaugeChartSegment, IGaugeChartStyleProps, IGaugeChartStyles } from './GaugeChart'; export { GaugeChart, GaugeChartVariant, GaugeValueFormat } from './GaugeChart'; -export type { DeclarativeChartProps, Schema } from './DeclarativeChart'; +export type { DeclarativeChartProps, Schema, IDeclarativeChart, IImageExportOptions } from './DeclarativeChart'; export { DeclarativeChart } from './DeclarativeChart'; import './version'; diff --git a/packages/charts/react-charting/src/types/IDataPoint.ts b/packages/charts/react-charting/src/types/IDataPoint.ts index 7e4127b26f2ee..dda593a408f4f 100644 --- a/packages/charts/react-charting/src/types/IDataPoint.ts +++ b/packages/charts/react-charting/src/types/IDataPoint.ts @@ -814,3 +814,10 @@ export interface ICustomizedCalloutData { x: number | string | Date; values: ICustomizedCalloutDataPoint[]; } + +/** + * {@docCategory Chart} + */ +export interface IChart { + chartContainer: HTMLElement | null; +} diff --git a/packages/react-examples/src/react-charting/DeclarativeChart/DeclarativeChart.Basic.Example.tsx b/packages/react-examples/src/react-charting/DeclarativeChart/DeclarativeChart.Basic.Example.tsx index e1e95218a39a9..ec0d58eabee23 100644 --- a/packages/react-examples/src/react-charting/DeclarativeChart/DeclarativeChart.Basic.Example.tsx +++ b/packages/react-examples/src/react-charting/DeclarativeChart/DeclarativeChart.Basic.Example.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { Dropdown, IDropdownOption } from '@fluentui/react/lib/Dropdown'; import { Toggle } from '@fluentui/react/lib/Toggle'; -import { DeclarativeChart, DeclarativeChartProps, Schema } from '@fluentui/react-charting'; +import { DeclarativeChart, DeclarativeChartProps, IDeclarativeChart, Schema } from '@fluentui/react-charting'; interface IDeclarativeChartState { selectedChoice: string; @@ -37,7 +37,18 @@ const schemas: any[] = [ const dropdownStyles = { dropdown: { width: 200 } }; +function fileSaver(url: string) { + const saveLink = document.createElement('a'); + saveLink.href = url; + saveLink.download = 'converted-image.png'; + document.body.appendChild(saveLink); + saveLink.click(); + document.body.removeChild(saveLink); +} + export class DeclarativeChartBasicExample extends React.Component<{}, IDeclarativeChartState> { + private _declarativeChartRef: React.RefObject; + constructor(props: DeclarativeChartProps) { super(props); this.state = { @@ -45,6 +56,8 @@ export class DeclarativeChartBasicExample extends React.Component<{}, IDeclarati preSelectLegends: false, selectedLegends: '', }; + + this._declarativeChartRef = React.createRef(); } public render(): JSX.Element { @@ -99,8 +112,22 @@ export class DeclarativeChartBasicExample extends React.Component<{}, IDeclarati />
+
- +
Legend selection changed : {this.state.selectedLegends} From e09d638cf76f55d4c6b16ba9ee6ea40e457869ec Mon Sep 17 00:00:00 2001 From: Fluent UI Build Date: Mon, 23 Dec 2024 07:23:16 +0000 Subject: [PATCH 14/24] release: applying package updates - react v8 --- ...-64d49103-6d6d-4ef0-93f0-2339233931e5.json | 7 ---- ...-8d924304-4078-4192-ba38-ec72171e24ca.json | 7 ---- ...-a7f6eac5-5e7c-40b4-ae8c-4b3dab5bc372.json | 7 ---- ...-576e3635-ea2b-48cd-b8bd-f35566e66189.json | 7 ---- packages/azure-themes/CHANGELOG.json | 15 +++++++ packages/azure-themes/CHANGELOG.md | 11 +++++- packages/azure-themes/package.json | 4 +- packages/charts/react-charting/CHANGELOG.json | 33 ++++++++++++++++ packages/charts/react-charting/CHANGELOG.md | 14 ++++++- packages/charts/react-charting/package.json | 8 ++-- packages/codemods/CHANGELOG.json | 15 +++++++ packages/codemods/CHANGELOG.md | 11 +++++- packages/codemods/package.json | 2 +- packages/common-styles/package.json | 2 +- packages/cra-template/package.json | 2 +- packages/fluent2-theme/CHANGELOG.json | 15 +++++++ packages/fluent2-theme/CHANGELOG.md | 11 +++++- packages/fluent2-theme/package.json | 4 +- packages/font-icons-mdl2/CHANGELOG.json | 15 +++++++ packages/font-icons-mdl2/CHANGELOG.md | 11 +++++- packages/font-icons-mdl2/package.json | 4 +- packages/foundation-legacy/CHANGELOG.json | 15 +++++++ packages/foundation-legacy/CHANGELOG.md | 11 +++++- packages/foundation-legacy/package.json | 4 +- packages/react-cards/CHANGELOG.json | 21 ++++++++++ packages/react-cards/CHANGELOG.md | 12 +++++- packages/react-cards/package.json | 6 +-- .../library/package.json | 4 +- packages/react-date-time/CHANGELOG.json | 15 +++++++ packages/react-date-time/CHANGELOG.md | 11 +++++- packages/react-date-time/package.json | 4 +- .../react-docsite-components/CHANGELOG.json | 27 +++++++++++++ .../react-docsite-components/CHANGELOG.md | 13 ++++++- .../react-docsite-components/package.json | 8 ++-- packages/react-examples/package.json | 30 +++++++------- packages/react-experiments/CHANGELOG.json | 39 +++++++++++++++++++ packages/react-experiments/CHANGELOG.md | 15 ++++++- packages/react-experiments/package.json | 12 +++--- packages/react-file-type-icons/CHANGELOG.json | 15 +++++++ packages/react-file-type-icons/CHANGELOG.md | 11 +++++- packages/react-file-type-icons/package.json | 4 +- packages/react-focus/CHANGELOG.json | 15 +++++++ packages/react-focus/CHANGELOG.md | 11 +++++- packages/react-focus/package.json | 4 +- packages/react-icon-provider/CHANGELOG.json | 21 ++++++++++ packages/react-icon-provider/CHANGELOG.md | 12 +++++- packages/react-icon-provider/package.json | 4 +- .../react-icons-mdl2-branded/CHANGELOG.json | 15 +++++++ .../react-icons-mdl2-branded/CHANGELOG.md | 11 +++++- .../react-icons-mdl2-branded/package.json | 4 +- packages/react-icons-mdl2/CHANGELOG.json | 15 +++++++ packages/react-icons-mdl2/CHANGELOG.md | 11 +++++- packages/react-icons-mdl2/package.json | 4 +- packages/react-monaco-editor/CHANGELOG.json | 21 ++++++++++ packages/react-monaco-editor/CHANGELOG.md | 12 +++++- packages/react-monaco-editor/package.json | 6 +-- packages/react/CHANGELOG.json | 39 +++++++++++++++++++ packages/react/CHANGELOG.md | 15 ++++++- packages/react/package.json | 12 +++--- packages/scheme-utilities/CHANGELOG.json | 15 +++++++ packages/scheme-utilities/CHANGELOG.md | 11 +++++- packages/scheme-utilities/package.json | 4 +- packages/storybook/package.json | 8 ++-- packages/style-utilities/CHANGELOG.json | 15 +++++++ packages/style-utilities/CHANGELOG.md | 11 +++++- packages/style-utilities/package.json | 4 +- packages/theme-samples/CHANGELOG.json | 21 ++++++++++ packages/theme-samples/CHANGELOG.md | 12 +++++- packages/theme-samples/package.json | 6 +-- packages/theme/CHANGELOG.json | 15 +++++++ packages/theme/CHANGELOG.md | 11 +++++- packages/theme/package.json | 2 +- 72 files changed, 722 insertions(+), 127 deletions(-) delete mode 100644 change/@fluentui-codemods-64d49103-6d6d-4ef0-93f0-2339233931e5.json delete mode 100644 change/@fluentui-react-charting-8d924304-4078-4192-ba38-ec72171e24ca.json delete mode 100644 change/@fluentui-react-icon-provider-a7f6eac5-5e7c-40b4-ae8c-4b3dab5bc372.json delete mode 100644 change/@fluentui-theme-576e3635-ea2b-48cd-b8bd-f35566e66189.json diff --git a/change/@fluentui-codemods-64d49103-6d6d-4ef0-93f0-2339233931e5.json b/change/@fluentui-codemods-64d49103-6d6d-4ef0-93f0-2339233931e5.json deleted file mode 100644 index f67a35684218e..0000000000000 --- a/change/@fluentui-codemods-64d49103-6d6d-4ef0-93f0-2339233931e5.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "patch", - "comment": "chore: remove usage of \"export *\"", - "packageName": "@fluentui/codemods", - "email": "olfedias@microsoft.com", - "dependentChangeType": "patch" -} diff --git a/change/@fluentui-react-charting-8d924304-4078-4192-ba38-ec72171e24ca.json b/change/@fluentui-react-charting-8d924304-4078-4192-ba38-ec72171e24ca.json deleted file mode 100644 index de5d1d1d7930c..0000000000000 --- a/change/@fluentui-react-charting-8d924304-4078-4192-ba38-ec72171e24ca.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "patch", - "comment": "feat: add functionality to export chart as image", - "packageName": "@fluentui/react-charting", - "email": "110246001+krkshitij@users.noreply.github.com", - "dependentChangeType": "patch" -} diff --git a/change/@fluentui-react-icon-provider-a7f6eac5-5e7c-40b4-ae8c-4b3dab5bc372.json b/change/@fluentui-react-icon-provider-a7f6eac5-5e7c-40b4-ae8c-4b3dab5bc372.json deleted file mode 100644 index 7949b00332d92..0000000000000 --- a/change/@fluentui-react-icon-provider-a7f6eac5-5e7c-40b4-ae8c-4b3dab5bc372.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "patch", - "comment": "chore: remove usage of \"export *\"", - "packageName": "@fluentui/react-icon-provider", - "email": "olfedias@microsoft.com", - "dependentChangeType": "patch" -} diff --git a/change/@fluentui-theme-576e3635-ea2b-48cd-b8bd-f35566e66189.json b/change/@fluentui-theme-576e3635-ea2b-48cd-b8bd-f35566e66189.json deleted file mode 100644 index aa1ed0df91a3a..0000000000000 --- a/change/@fluentui-theme-576e3635-ea2b-48cd-b8bd-f35566e66189.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "patch", - "comment": "chore: remove usage of \"export *\"", - "packageName": "@fluentui/theme", - "email": "olfedias@microsoft.com", - "dependentChangeType": "patch" -} diff --git a/packages/azure-themes/CHANGELOG.json b/packages/azure-themes/CHANGELOG.json index 58c63f07e88b3..0cdaa9ab5e688 100644 --- a/packages/azure-themes/CHANGELOG.json +++ b/packages/azure-themes/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/azure-themes", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/azure-themes_v8.6.115", + "version": "8.6.115", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/azure-themes", + "comment": "Bump @fluentui/react to v8.122.2", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 13 Dec 2024 07:23:12 GMT", "tag": "@fluentui/azure-themes_v8.6.114", diff --git a/packages/azure-themes/CHANGELOG.md b/packages/azure-themes/CHANGELOG.md index 024ff14c00d60..d719297e62b5b 100644 --- a/packages/azure-themes/CHANGELOG.md +++ b/packages/azure-themes/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/azure-themes -This log was last generated on Fri, 13 Dec 2024 07:23:12 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [8.6.115](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.6.115) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/azure-themes_v8.6.114..@fluentui/azure-themes_v8.6.115) + +### Patches + +- Bump @fluentui/react to v8.122.2 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [8.6.114](https://github.com/microsoft/fluentui/tree/@fluentui/azure-themes_v8.6.114) Fri, 13 Dec 2024 07:23:12 GMT diff --git a/packages/azure-themes/package.json b/packages/azure-themes/package.json index 2136423a78502..0bfd7b970ea7a 100644 --- a/packages/azure-themes/package.json +++ b/packages/azure-themes/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/azure-themes", - "version": "8.6.114", + "version": "8.6.115", "description": "Azure themes for Fluent UI React", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -27,7 +27,7 @@ "@fluentui/scripts-webpack": "*" }, "dependencies": { - "@fluentui/react": "^8.122.1", + "@fluentui/react": "^8.122.2", "@fluentui/set-version": "^8.2.23", "tslib": "^2.1.0" } diff --git a/packages/charts/react-charting/CHANGELOG.json b/packages/charts/react-charting/CHANGELOG.json index 3937b8e683973..62c4a5ee6b2b3 100644 --- a/packages/charts/react-charting/CHANGELOG.json +++ b/packages/charts/react-charting/CHANGELOG.json @@ -1,6 +1,39 @@ { "name": "@fluentui/react-charting", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:57 GMT", + "tag": "@fluentui/react-charting_v5.23.29", + "version": "5.23.29", + "comments": { + "patch": [ + { + "author": "110246001+krkshitij@users.noreply.github.com", + "package": "@fluentui/react-charting", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee", + "comment": "feat: add functionality to export chart as image" + }, + { + "author": "beachball", + "package": "@fluentui/react-charting", + "comment": "Bump @fluentui/react-focus to v8.9.20", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + }, + { + "author": "beachball", + "package": "@fluentui/react-charting", + "comment": "Bump @fluentui/theme-samples to v8.7.191", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + }, + { + "author": "beachball", + "package": "@fluentui/react-charting", + "comment": "Bump @fluentui/react to v8.122.2", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 20 Dec 2024 07:20:00 GMT", "tag": "@fluentui/react-charting_v5.23.28", diff --git a/packages/charts/react-charting/CHANGELOG.md b/packages/charts/react-charting/CHANGELOG.md index 6c3807c6aee3f..9bdb6d599f8e0 100644 --- a/packages/charts/react-charting/CHANGELOG.md +++ b/packages/charts/react-charting/CHANGELOG.md @@ -1,9 +1,21 @@ # Change Log - @fluentui/react-charting -This log was last generated on Fri, 20 Dec 2024 07:20:00 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:57 GMT and should not be manually modified. +## [5.23.29](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.23.29) + +Mon, 23 Dec 2024 07:22:57 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.23.28..@fluentui/react-charting_v5.23.29) + +### Patches + +- feat: add functionality to export chart as image ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by 110246001+krkshitij@users.noreply.github.com) +- Bump @fluentui/react-focus to v8.9.20 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) +- Bump @fluentui/theme-samples to v8.7.191 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) +- Bump @fluentui/react to v8.122.2 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [5.23.28](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.23.28) Fri, 20 Dec 2024 07:20:00 GMT diff --git a/packages/charts/react-charting/package.json b/packages/charts/react-charting/package.json index cb9875c26eff9..420f95e214f4e 100644 --- a/packages/charts/react-charting/package.json +++ b/packages/charts/react-charting/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-charting", - "version": "5.23.28", + "version": "5.23.29", "description": "React web charting controls for Microsoft fluentui system.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -39,8 +39,8 @@ "jest-canvas-mock": "2.4.0" }, "dependencies": { - "@fluentui/react-focus": "^8.9.19", - "@fluentui/theme-samples": "^8.7.190", + "@fluentui/react-focus": "^8.9.20", + "@fluentui/theme-samples": "^8.7.191", "@microsoft/load-themed-styles": "^1.10.26", "@types/d3-array": "^3.0.0", "@types/d3-axis": "^3.0.0", @@ -66,7 +66,7 @@ "tslib": "^2.1.0" }, "peerDependencies": { - "@fluentui/react": "^8.122.1", + "@fluentui/react": "^8.122.2", "@types/react": ">=16.8.0 <19.0.0", "@types/react-dom": ">=16.8.0 <19.0.0", "react": ">=16.8.0 <19.0.0", diff --git a/packages/codemods/CHANGELOG.json b/packages/codemods/CHANGELOG.json index 909e250cea9cd..2056607f1acf2 100644 --- a/packages/codemods/CHANGELOG.json +++ b/packages/codemods/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/codemods", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:57 GMT", + "tag": "@fluentui/codemods_v8.4.27", + "version": "8.4.27", + "comments": { + "patch": [ + { + "author": "olfedias@microsoft.com", + "package": "@fluentui/codemods", + "commit": "dc7bb663e3d93a19b611cf1892556d69c57b1269", + "comment": "chore: remove usage of \"export *\"" + } + ] + } + }, { "date": "Thu, 11 Jul 2024 07:33:36 GMT", "tag": "@fluentui/codemods_v8.4.26", diff --git a/packages/codemods/CHANGELOG.md b/packages/codemods/CHANGELOG.md index 4a1409ea50e39..6548074ea7a59 100644 --- a/packages/codemods/CHANGELOG.md +++ b/packages/codemods/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/codemods -This log was last generated on Tue, 09 Jul 2024 07:36:39 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:57 GMT and should not be manually modified. +## [8.4.27](https://github.com/microsoft/fluentui/tree/@fluentui/codemods_v8.4.27) + +Mon, 23 Dec 2024 07:22:57 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/codemods_v8.4.26..@fluentui/codemods_v8.4.27) + +### Patches + +- chore: remove usage of "export *" ([PR #33448](https://github.com/microsoft/fluentui/pull/33448) by olfedias@microsoft.com) + ## [8.4.26](https://github.com/microsoft/fluentui/tree/@fluentui/codemods_v8.4.26) Tue, 09 Jul 2024 07:36:39 GMT diff --git a/packages/codemods/package.json b/packages/codemods/package.json index 1db4b8f33dea6..27f6a4cb2f7ab 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/codemods", - "version": "8.4.26", + "version": "8.4.27", "description": "Tool enabling easy upgrades to new Fluent UI versions", "main": "lib-commonjs/index.js", "typings": "lib-commonjs/index.d.ts", diff --git a/packages/common-styles/package.json b/packages/common-styles/package.json index f0885441ef4be..967855f1ddef0 100644 --- a/packages/common-styles/package.json +++ b/packages/common-styles/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/common-styles", - "version": "1.2.64", + "version": "1.2.65", "description": "Common style definitions for Fluent UI React components", "repository": { "type": "git", diff --git a/packages/cra-template/package.json b/packages/cra-template/package.json index cd7b601762174..ee7822c53498d 100644 --- a/packages/cra-template/package.json +++ b/packages/cra-template/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/cra-template", - "version": "8.4.191", + "version": "8.4.192", "description": "Create React App template for Fluent UI React (@fluentui/react)", "repository": { "type": "git", diff --git a/packages/fluent2-theme/CHANGELOG.json b/packages/fluent2-theme/CHANGELOG.json index c3eb267246098..89f6555b6712d 100644 --- a/packages/fluent2-theme/CHANGELOG.json +++ b/packages/fluent2-theme/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/fluent2-theme", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/fluent2-theme_v8.107.119", + "version": "8.107.119", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/fluent2-theme", + "comment": "Bump @fluentui/react to v8.122.2", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 13 Dec 2024 07:23:12 GMT", "tag": "@fluentui/fluent2-theme_v8.107.118", diff --git a/packages/fluent2-theme/CHANGELOG.md b/packages/fluent2-theme/CHANGELOG.md index b12fed6710f4d..218220c278046 100644 --- a/packages/fluent2-theme/CHANGELOG.md +++ b/packages/fluent2-theme/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/fluent2-theme -This log was last generated on Fri, 13 Dec 2024 07:23:12 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [8.107.119](https://github.com/microsoft/fluentui/tree/@fluentui/fluent2-theme_v8.107.119) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/fluent2-theme_v8.107.118..@fluentui/fluent2-theme_v8.107.119) + +### Patches + +- Bump @fluentui/react to v8.122.2 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [8.107.118](https://github.com/microsoft/fluentui/tree/@fluentui/fluent2-theme_v8.107.118) Fri, 13 Dec 2024 07:23:12 GMT diff --git a/packages/fluent2-theme/package.json b/packages/fluent2-theme/package.json index 21281ce32040f..ce8b5b9ad32cf 100644 --- a/packages/fluent2-theme/package.json +++ b/packages/fluent2-theme/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/fluent2-theme", - "version": "8.107.118", + "version": "8.107.119", "description": "A Fluent2 theme for Fluent UI React 8.x", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -27,7 +27,7 @@ "@fluentui/scripts-webpack": "*" }, "dependencies": { - "@fluentui/react": "^8.122.1", + "@fluentui/react": "^8.122.2", "@fluentui/set-version": "^8.2.23", "tslib": "^2.1.0" } diff --git a/packages/font-icons-mdl2/CHANGELOG.json b/packages/font-icons-mdl2/CHANGELOG.json index c3c1f5f6eb79e..cda94a3050c54 100644 --- a/packages/font-icons-mdl2/CHANGELOG.json +++ b/packages/font-icons-mdl2/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/font-icons-mdl2", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/font-icons-mdl2_v8.5.57", + "version": "8.5.57", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/font-icons-mdl2", + "comment": "Bump @fluentui/style-utilities to v8.11.6", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 13 Dec 2024 07:23:12 GMT", "tag": "@fluentui/font-icons-mdl2_v8.5.56", diff --git a/packages/font-icons-mdl2/CHANGELOG.md b/packages/font-icons-mdl2/CHANGELOG.md index c9b879908dd1e..caae1ea746007 100644 --- a/packages/font-icons-mdl2/CHANGELOG.md +++ b/packages/font-icons-mdl2/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/font-icons-mdl2 -This log was last generated on Fri, 13 Dec 2024 07:23:12 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [8.5.57](https://github.com/microsoft/fluentui/tree/@fluentui/font-icons-mdl2_v8.5.57) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/font-icons-mdl2_v8.5.56..@fluentui/font-icons-mdl2_v8.5.57) + +### Patches + +- Bump @fluentui/style-utilities to v8.11.6 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [8.5.56](https://github.com/microsoft/fluentui/tree/@fluentui/font-icons-mdl2_v8.5.56) Fri, 13 Dec 2024 07:23:12 GMT diff --git a/packages/font-icons-mdl2/package.json b/packages/font-icons-mdl2/package.json index 31cc66ab231ae..c1b5b5a4e4bac 100644 --- a/packages/font-icons-mdl2/package.json +++ b/packages/font-icons-mdl2/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/font-icons-mdl2", - "version": "8.5.56", + "version": "8.5.57", "description": "Fluent UI React icon set.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -28,7 +28,7 @@ }, "dependencies": { "@fluentui/set-version": "^8.2.23", - "@fluentui/style-utilities": "^8.11.5", + "@fluentui/style-utilities": "^8.11.6", "@fluentui/utilities": "^8.15.19", "tslib": "^2.1.0" }, diff --git a/packages/foundation-legacy/CHANGELOG.json b/packages/foundation-legacy/CHANGELOG.json index e4ea346e5508c..d7708bd4ff75a 100644 --- a/packages/foundation-legacy/CHANGELOG.json +++ b/packages/foundation-legacy/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/foundation-legacy", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/foundation-legacy_v8.4.23", + "version": "8.4.23", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/foundation-legacy", + "comment": "Bump @fluentui/style-utilities to v8.11.6", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 13 Dec 2024 07:23:12 GMT", "tag": "@fluentui/foundation-legacy_v8.4.22", diff --git a/packages/foundation-legacy/CHANGELOG.md b/packages/foundation-legacy/CHANGELOG.md index c80687b70d060..ed3c079575ece 100644 --- a/packages/foundation-legacy/CHANGELOG.md +++ b/packages/foundation-legacy/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/foundation-legacy -This log was last generated on Fri, 13 Dec 2024 07:23:12 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [8.4.23](https://github.com/microsoft/fluentui/tree/@fluentui/foundation-legacy_v8.4.23) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/foundation-legacy_v8.4.22..@fluentui/foundation-legacy_v8.4.23) + +### Patches + +- Bump @fluentui/style-utilities to v8.11.6 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [8.4.22](https://github.com/microsoft/fluentui/tree/@fluentui/foundation-legacy_v8.4.22) Fri, 13 Dec 2024 07:23:12 GMT diff --git a/packages/foundation-legacy/package.json b/packages/foundation-legacy/package.json index 947bc28531dd6..f36c7e4806ad9 100644 --- a/packages/foundation-legacy/package.json +++ b/packages/foundation-legacy/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/foundation-legacy", - "version": "8.4.22", + "version": "8.4.23", "description": "Legacy utilities for building Fluent UI React components.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -35,7 +35,7 @@ "dependencies": { "@fluentui/merge-styles": "^8.6.13", "@fluentui/set-version": "^8.2.23", - "@fluentui/style-utilities": "^8.11.5", + "@fluentui/style-utilities": "^8.11.6", "@fluentui/utilities": "^8.15.19", "tslib": "^2.1.0" }, diff --git a/packages/react-cards/CHANGELOG.json b/packages/react-cards/CHANGELOG.json index 232b8ff065b87..1f7233662aa52 100644 --- a/packages/react-cards/CHANGELOG.json +++ b/packages/react-cards/CHANGELOG.json @@ -1,6 +1,27 @@ { "name": "@fluentui/react-cards", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/react-cards_v0.205.191", + "version": "0.205.191", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-cards", + "comment": "Bump @fluentui/react to v8.122.2", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + }, + { + "author": "beachball", + "package": "@fluentui/react-cards", + "comment": "Bump @fluentui/foundation-legacy to v8.4.23", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 13 Dec 2024 07:23:12 GMT", "tag": "@fluentui/react-cards_v0.205.190", diff --git a/packages/react-cards/CHANGELOG.md b/packages/react-cards/CHANGELOG.md index cadec79291f3e..6b47697a3ed42 100644 --- a/packages/react-cards/CHANGELOG.md +++ b/packages/react-cards/CHANGELOG.md @@ -1,9 +1,19 @@ # Change Log - @fluentui/react-cards -This log was last generated on Fri, 13 Dec 2024 07:23:12 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [0.205.191](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.191) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-cards_v0.205.190..@fluentui/react-cards_v0.205.191) + +### Patches + +- Bump @fluentui/react to v8.122.2 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) +- Bump @fluentui/foundation-legacy to v8.4.23 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [0.205.190](https://github.com/microsoft/fluentui/tree/@fluentui/react-cards_v0.205.190) Fri, 13 Dec 2024 07:23:12 GMT diff --git a/packages/react-cards/package.json b/packages/react-cards/package.json index 8c58a51a68bec..9ab5eee1ce962 100644 --- a/packages/react-cards/package.json +++ b/packages/react-cards/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-cards", - "version": "0.205.190", + "version": "0.205.191", "description": "Deprecated experimental Card container components for Fluent UI React.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -33,8 +33,8 @@ "@fluentui/scripts-webpack": "*" }, "dependencies": { - "@fluentui/react": "^8.122.1", - "@fluentui/foundation-legacy": "^8.4.22", + "@fluentui/react": "^8.122.2", + "@fluentui/foundation-legacy": "^8.4.23", "@fluentui/set-version": "^8.2.23", "@microsoft/load-themed-styles": "^1.10.26", "tslib": "^2.1.0" diff --git a/packages/react-components/react-migration-v8-v9/library/package.json b/packages/react-components/react-migration-v8-v9/library/package.json index 05702c7ce4348..f02d0b19a7977 100644 --- a/packages/react-components/react-migration-v8-v9/library/package.json +++ b/packages/react-components/react-migration-v8-v9/library/package.json @@ -19,8 +19,8 @@ }, "dependencies": { "@ctrl/tinycolor": "3.3.4", - "@fluentui/fluent2-theme": "^8.107.118", - "@fluentui/react": "^8.122.1", + "@fluentui/fluent2-theme": "^8.107.119", + "@fluentui/react": "^8.122.2", "@fluentui/react-components": "^9.56.8", "@fluentui/react-icons": "^2.0.245", "@fluentui/react-hooks": "^8.8.16", diff --git a/packages/react-date-time/CHANGELOG.json b/packages/react-date-time/CHANGELOG.json index 4fe366a2523ab..bf59d451eb37f 100644 --- a/packages/react-date-time/CHANGELOG.json +++ b/packages/react-date-time/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-date-time", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/react-date-time_v8.7.191", + "version": "8.7.191", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-date-time", + "comment": "Bump @fluentui/react to v8.122.2", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 13 Dec 2024 07:23:12 GMT", "tag": "@fluentui/react-date-time_v8.7.190", diff --git a/packages/react-date-time/CHANGELOG.md b/packages/react-date-time/CHANGELOG.md index 39d8f943c0233..cebff715da268 100644 --- a/packages/react-date-time/CHANGELOG.md +++ b/packages/react-date-time/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-date-time -This log was last generated on Fri, 13 Dec 2024 07:23:12 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [8.7.191](https://github.com/microsoft/fluentui/tree/@fluentui/react-date-time_v8.7.191) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-date-time_v8.7.190..@fluentui/react-date-time_v8.7.191) + +### Patches + +- Bump @fluentui/react to v8.122.2 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [8.7.190](https://github.com/microsoft/fluentui/tree/@fluentui/react-date-time_v8.7.190) Fri, 13 Dec 2024 07:23:12 GMT diff --git a/packages/react-date-time/package.json b/packages/react-date-time/package.json index 1e887155c4dd5..9153ceb7bfae2 100644 --- a/packages/react-date-time/package.json +++ b/packages/react-date-time/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-date-time", - "version": "8.7.190", + "version": "8.7.191", "description": "Date and time related React components for building experiences for Microsoft 365.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -27,7 +27,7 @@ "@fluentui/scripts-webpack": "*" }, "dependencies": { - "@fluentui/react": "^8.122.1", + "@fluentui/react": "^8.122.2", "@fluentui/set-version": "^8.2.23", "tslib": "^2.1.0" }, diff --git a/packages/react-docsite-components/CHANGELOG.json b/packages/react-docsite-components/CHANGELOG.json index 2585b860f11c5..bc9a43ebeed16 100644 --- a/packages/react-docsite-components/CHANGELOG.json +++ b/packages/react-docsite-components/CHANGELOG.json @@ -1,6 +1,33 @@ { "name": "@fluentui/react-docsite-components", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/react-docsite-components_v8.13.149", + "version": "8.13.149", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-docsite-components", + "comment": "Bump @fluentui/react to v8.122.2", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + }, + { + "author": "beachball", + "package": "@fluentui/react-docsite-components", + "comment": "Bump @fluentui/theme to v2.6.64", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + }, + { + "author": "beachball", + "package": "@fluentui/react-docsite-components", + "comment": "Bump @fluentui/react-monaco-editor to v1.7.267", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 20 Dec 2024 07:20:01 GMT", "tag": "@fluentui/react-docsite-components_v8.13.148", diff --git a/packages/react-docsite-components/CHANGELOG.md b/packages/react-docsite-components/CHANGELOG.md index 0d0d9c53d902c..f71fd3cbdf35c 100644 --- a/packages/react-docsite-components/CHANGELOG.md +++ b/packages/react-docsite-components/CHANGELOG.md @@ -1,9 +1,20 @@ # Change Log - @fluentui/react-docsite-components -This log was last generated on Fri, 20 Dec 2024 07:20:01 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [8.13.149](https://github.com/microsoft/fluentui/tree/@fluentui/react-docsite-components_v8.13.149) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-docsite-components_v8.13.148..@fluentui/react-docsite-components_v8.13.149) + +### Patches + +- Bump @fluentui/react to v8.122.2 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) +- Bump @fluentui/theme to v2.6.64 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) +- Bump @fluentui/react-monaco-editor to v1.7.267 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [8.13.148](https://github.com/microsoft/fluentui/tree/@fluentui/react-docsite-components_v8.13.148) Fri, 20 Dec 2024 07:20:01 GMT diff --git a/packages/react-docsite-components/package.json b/packages/react-docsite-components/package.json index 85d4c1e9845d1..8a4f24a6c2162 100644 --- a/packages/react-docsite-components/package.json +++ b/packages/react-docsite-components/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-docsite-components", - "version": "8.13.148", + "version": "8.13.149", "description": "Fluent UI React components for building documentation sites.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -35,14 +35,14 @@ "react-dom": ">=16.8.0 <19.0.0" }, "dependencies": { - "@fluentui/react": "^8.122.1", - "@fluentui/theme": "^2.6.63", + "@fluentui/react": "^8.122.2", + "@fluentui/theme": "^2.6.64", "@microsoft/load-themed-styles": "^1.10.26", "@fluentui/example-data": "^8.4.25", "@fluentui/public-docsite-setup": "^0.3.34", "@fluentui/react-hooks": "^8.8.16", "@fluentui/set-version": "^8.2.23", - "@fluentui/react-monaco-editor": "^1.7.266", + "@fluentui/react-monaco-editor": "^1.7.267", "color-check": "0.0.2", "markdown-to-jsx": "^7.0.0", "office-ui-fabric-core": "^11.0.0", diff --git a/packages/react-examples/package.json b/packages/react-examples/package.json index 842f999d0a77c..f1089434d4c4c 100644 --- a/packages/react-examples/package.json +++ b/packages/react-examples/package.json @@ -27,27 +27,27 @@ "@fluentui/scripts-tasks": "*" }, "dependencies": { - "@fluentui/azure-themes": "^8.6.114", + "@fluentui/azure-themes": "^8.6.115", "@fluentui/date-time-utilities": "^8.6.9", "@fluentui/dom-utilities": "^2.3.9", "@fluentui/example-data": "^8.4.25", - "@fluentui/font-icons-mdl2": "^8.5.56", - "@fluentui/foundation-legacy": "^8.4.22", + "@fluentui/font-icons-mdl2": "^8.5.57", + "@fluentui/foundation-legacy": "^8.4.23", "@fluentui/merge-styles": "^8.6.13", - "@fluentui/react": "^8.122.1", - "@fluentui/react-cards": "^0.205.190", - "@fluentui/react-charting": "^5.23.28", - "@fluentui/react-docsite-components": "^8.13.148", - "@fluentui/react-experiments": "^8.14.187", - "@fluentui/react-file-type-icons": "^8.12.6", - "@fluentui/react-focus": "^8.9.19", + "@fluentui/react": "^8.122.2", + "@fluentui/react-cards": "^0.205.191", + "@fluentui/react-charting": "^5.23.29", + "@fluentui/react-docsite-components": "^8.13.149", + "@fluentui/react-experiments": "^8.14.188", + "@fluentui/react-file-type-icons": "^8.12.7", + "@fluentui/react-focus": "^8.9.20", "@fluentui/react-hooks": "^8.8.16", - "@fluentui/react-icons-mdl2": "^1.3.81", + "@fluentui/react-icons-mdl2": "^1.3.82", "@fluentui/react-window-provider": "^2.2.28", - "@fluentui/scheme-utilities": "^8.3.64", - "@fluentui/style-utilities": "^8.11.5", - "@fluentui/theme": "^2.6.63", - "@fluentui/theme-samples": "^8.7.190", + "@fluentui/scheme-utilities": "^8.3.65", + "@fluentui/style-utilities": "^8.11.6", + "@fluentui/theme": "^2.6.64", + "@fluentui/theme-samples": "^8.7.191", "@fluentui/utilities": "^8.15.19", "@microsoft/load-themed-styles": "^1.10.26", "d3-fetch": "3.0.1", diff --git a/packages/react-experiments/CHANGELOG.json b/packages/react-experiments/CHANGELOG.json index 6102a91b98870..47874318cf96e 100644 --- a/packages/react-experiments/CHANGELOG.json +++ b/packages/react-experiments/CHANGELOG.json @@ -1,6 +1,45 @@ { "name": "@fluentui/react-experiments", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/react-experiments_v8.14.188", + "version": "8.14.188", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-experiments", + "comment": "Bump @fluentui/react to v8.122.2", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + }, + { + "author": "beachball", + "package": "@fluentui/react-experiments", + "comment": "Bump @fluentui/theme to v2.6.64", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + }, + { + "author": "beachball", + "package": "@fluentui/react-experiments", + "comment": "Bump @fluentui/foundation-legacy to v8.4.23", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + }, + { + "author": "beachball", + "package": "@fluentui/react-experiments", + "comment": "Bump @fluentui/font-icons-mdl2 to v8.5.57", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + }, + { + "author": "beachball", + "package": "@fluentui/react-experiments", + "comment": "Bump @fluentui/style-utilities to v8.11.6", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 13 Dec 2024 07:23:12 GMT", "tag": "@fluentui/react-experiments_v8.14.187", diff --git a/packages/react-experiments/CHANGELOG.md b/packages/react-experiments/CHANGELOG.md index 6765724d55c64..6d96dd164dcfb 100644 --- a/packages/react-experiments/CHANGELOG.md +++ b/packages/react-experiments/CHANGELOG.md @@ -1,9 +1,22 @@ # Change Log - @fluentui/react-experiments -This log was last generated on Fri, 13 Dec 2024 07:23:12 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [8.14.188](https://github.com/microsoft/fluentui/tree/@fluentui/react-experiments_v8.14.188) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-experiments_v8.14.187..@fluentui/react-experiments_v8.14.188) + +### Patches + +- Bump @fluentui/react to v8.122.2 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) +- Bump @fluentui/theme to v2.6.64 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) +- Bump @fluentui/foundation-legacy to v8.4.23 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) +- Bump @fluentui/font-icons-mdl2 to v8.5.57 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) +- Bump @fluentui/style-utilities to v8.11.6 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [8.14.187](https://github.com/microsoft/fluentui/tree/@fluentui/react-experiments_v8.14.187) Fri, 13 Dec 2024 07:23:12 GMT diff --git a/packages/react-experiments/package.json b/packages/react-experiments/package.json index 82aefbe7f34ae..ad659c153a951 100644 --- a/packages/react-experiments/package.json +++ b/packages/react-experiments/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-experiments", - "version": "8.14.187", + "version": "8.14.188", "description": "Experimental React components for building experiences for Microsoft 365.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -38,16 +38,16 @@ "@fluentui/scripts-webpack": "*" }, "dependencies": { - "@fluentui/react": "^8.122.1", - "@fluentui/theme": "^2.6.63", + "@fluentui/react": "^8.122.2", + "@fluentui/theme": "^2.6.64", "@microsoft/load-themed-styles": "^1.10.26", "@fluentui/example-data": "^8.4.25", - "@fluentui/foundation-legacy": "^8.4.22", - "@fluentui/font-icons-mdl2": "^8.5.56", + "@fluentui/foundation-legacy": "^8.4.23", + "@fluentui/font-icons-mdl2": "^8.5.57", "@fluentui/merge-styles": "^8.6.13", "@fluentui/react-hooks": "^8.8.16", "@fluentui/set-version": "^8.2.23", - "@fluentui/style-utilities": "^8.11.5", + "@fluentui/style-utilities": "^8.11.6", "@fluentui/utilities": "^8.15.19", "deep-assign": "^2.0.0", "prop-types": "^15.7.2", diff --git a/packages/react-file-type-icons/CHANGELOG.json b/packages/react-file-type-icons/CHANGELOG.json index af4fd46f31705..46f5e3ffdc0b2 100644 --- a/packages/react-file-type-icons/CHANGELOG.json +++ b/packages/react-file-type-icons/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-file-type-icons", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/react-file-type-icons_v8.12.7", + "version": "8.12.7", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-file-type-icons", + "comment": "Bump @fluentui/style-utilities to v8.11.6", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 13 Dec 2024 07:23:12 GMT", "tag": "@fluentui/react-file-type-icons_v8.12.6", diff --git a/packages/react-file-type-icons/CHANGELOG.md b/packages/react-file-type-icons/CHANGELOG.md index 818517d7db89a..9db6c3fde7e9d 100644 --- a/packages/react-file-type-icons/CHANGELOG.md +++ b/packages/react-file-type-icons/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-file-type-icons -This log was last generated on Fri, 13 Dec 2024 07:23:12 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [8.12.7](https://github.com/microsoft/fluentui/tree/@fluentui/react-file-type-icons_v8.12.7) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-file-type-icons_v8.12.6..@fluentui/react-file-type-icons_v8.12.7) + +### Patches + +- Bump @fluentui/style-utilities to v8.11.6 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [8.12.6](https://github.com/microsoft/fluentui/tree/@fluentui/react-file-type-icons_v8.12.6) Fri, 13 Dec 2024 07:23:12 GMT diff --git a/packages/react-file-type-icons/package.json b/packages/react-file-type-icons/package.json index 7828077df3dcb..d6daa5e700488 100644 --- a/packages/react-file-type-icons/package.json +++ b/packages/react-file-type-icons/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-file-type-icons", - "version": "8.12.6", + "version": "8.12.7", "description": "Fluent UI React file type icon set.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -28,7 +28,7 @@ }, "dependencies": { "@fluentui/set-version": "^8.2.23", - "@fluentui/style-utilities": "^8.11.5", + "@fluentui/style-utilities": "^8.11.6", "tslib": "^2.1.0" }, "peerDependencies": { diff --git a/packages/react-focus/CHANGELOG.json b/packages/react-focus/CHANGELOG.json index b15de9b3c8a50..151892d1415cd 100644 --- a/packages/react-focus/CHANGELOG.json +++ b/packages/react-focus/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-focus", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/react-focus_v8.9.20", + "version": "8.9.20", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-focus", + "comment": "Bump @fluentui/style-utilities to v8.11.6", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 13 Dec 2024 07:23:12 GMT", "tag": "@fluentui/react-focus_v8.9.19", diff --git a/packages/react-focus/CHANGELOG.md b/packages/react-focus/CHANGELOG.md index 2d05140c9d56c..0905a2bebf260 100644 --- a/packages/react-focus/CHANGELOG.md +++ b/packages/react-focus/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-focus -This log was last generated on Fri, 13 Dec 2024 07:23:12 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [8.9.20](https://github.com/microsoft/fluentui/tree/@fluentui/react-focus_v8.9.20) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-focus_v8.9.19..@fluentui/react-focus_v8.9.20) + +### Patches + +- Bump @fluentui/style-utilities to v8.11.6 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [8.9.19](https://github.com/microsoft/fluentui/tree/@fluentui/react-focus_v8.9.19) Fri, 13 Dec 2024 07:23:12 GMT diff --git a/packages/react-focus/package.json b/packages/react-focus/package.json index 77e8958bb5eb8..c96fce9f88f01 100644 --- a/packages/react-focus/package.json +++ b/packages/react-focus/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-focus", - "version": "8.9.19", + "version": "8.9.20", "description": "Focus helpers to be used in React applications.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -38,7 +38,7 @@ "@fluentui/keyboard-key": "^0.4.23", "@fluentui/merge-styles": "^8.6.13", "@fluentui/set-version": "^8.2.23", - "@fluentui/style-utilities": "^8.11.5", + "@fluentui/style-utilities": "^8.11.6", "@fluentui/utilities": "^8.15.19", "tslib": "^2.1.0" }, diff --git a/packages/react-icon-provider/CHANGELOG.json b/packages/react-icon-provider/CHANGELOG.json index e56287fc560af..279b00f9d91cd 100644 --- a/packages/react-icon-provider/CHANGELOG.json +++ b/packages/react-icon-provider/CHANGELOG.json @@ -1,6 +1,27 @@ { "name": "@fluentui/react-icon-provider", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:57 GMT", + "tag": "@fluentui/react-icon-provider_v1.3.78", + "version": "1.3.78", + "comments": { + "patch": [ + { + "author": "olfedias@microsoft.com", + "package": "@fluentui/react-icon-provider", + "commit": "dc7bb663e3d93a19b611cf1892556d69c57b1269", + "comment": "chore: remove usage of \"export *\"" + }, + { + "author": "beachball", + "package": "@fluentui/react-icon-provider", + "comment": "Bump @fluentui/style-utilities to v8.11.6", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 13 Dec 2024 07:23:12 GMT", "tag": "@fluentui/react-icon-provider_v1.3.77", diff --git a/packages/react-icon-provider/CHANGELOG.md b/packages/react-icon-provider/CHANGELOG.md index d76f29b8bdc46..581fad04ef790 100644 --- a/packages/react-icon-provider/CHANGELOG.md +++ b/packages/react-icon-provider/CHANGELOG.md @@ -1,9 +1,19 @@ # Change Log - @fluentui/react-icon-provider -This log was last generated on Fri, 13 Dec 2024 07:23:12 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:57 GMT and should not be manually modified. +## [1.3.78](https://github.com/microsoft/fluentui/tree/@fluentui/react-icon-provider_v1.3.78) + +Mon, 23 Dec 2024 07:22:57 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-icon-provider_v1.3.77..@fluentui/react-icon-provider_v1.3.78) + +### Patches + +- chore: remove usage of "export *" ([PR #33448](https://github.com/microsoft/fluentui/pull/33448) by olfedias@microsoft.com) +- Bump @fluentui/style-utilities to v8.11.6 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [1.3.77](https://github.com/microsoft/fluentui/tree/@fluentui/react-icon-provider_v1.3.77) Fri, 13 Dec 2024 07:23:12 GMT diff --git a/packages/react-icon-provider/package.json b/packages/react-icon-provider/package.json index 90170cc79f37c..1887d0aa9743b 100644 --- a/packages/react-icon-provider/package.json +++ b/packages/react-icon-provider/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-icon-provider", - "version": "1.3.77", + "version": "1.3.78", "description": "Package for applying icon overrides to Fluent UI React SVG icons", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -30,7 +30,7 @@ }, "dependencies": { "@fluentui/set-version": "^8.2.23", - "@fluentui/style-utilities": "^8.11.5", + "@fluentui/style-utilities": "^8.11.6", "tslib": "^2.1.0" }, "peerDependencies": { diff --git a/packages/react-icons-mdl2-branded/CHANGELOG.json b/packages/react-icons-mdl2-branded/CHANGELOG.json index 2e095626b23d9..3b43601e0d564 100644 --- a/packages/react-icons-mdl2-branded/CHANGELOG.json +++ b/packages/react-icons-mdl2-branded/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-icons-mdl2-branded", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/react-icons-mdl2-branded_v1.2.84", + "version": "1.2.84", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-icons-mdl2-branded", + "comment": "Bump @fluentui/react-icons-mdl2 to v1.3.82", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 13 Dec 2024 07:23:12 GMT", "tag": "@fluentui/react-icons-mdl2-branded_v1.2.83", diff --git a/packages/react-icons-mdl2-branded/CHANGELOG.md b/packages/react-icons-mdl2-branded/CHANGELOG.md index 65be76ca927a4..ac6983eb3f8db 100644 --- a/packages/react-icons-mdl2-branded/CHANGELOG.md +++ b/packages/react-icons-mdl2-branded/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-icons-mdl2-branded -This log was last generated on Fri, 13 Dec 2024 07:23:12 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [1.2.84](https://github.com/microsoft/fluentui/tree/@fluentui/react-icons-mdl2-branded_v1.2.84) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-icons-mdl2-branded_v1.2.83..@fluentui/react-icons-mdl2-branded_v1.2.84) + +### Patches + +- Bump @fluentui/react-icons-mdl2 to v1.3.82 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [1.2.83](https://github.com/microsoft/fluentui/tree/@fluentui/react-icons-mdl2-branded_v1.2.83) Fri, 13 Dec 2024 07:23:12 GMT diff --git a/packages/react-icons-mdl2-branded/package.json b/packages/react-icons-mdl2-branded/package.json index cc6afcf48e61a..55901e2cff2b1 100644 --- a/packages/react-icons-mdl2-branded/package.json +++ b/packages/react-icons-mdl2-branded/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-icons-mdl2-branded", - "version": "1.2.83", + "version": "1.2.84", "description": "Branded SVG icons from the MDL2 icon set", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -26,7 +26,7 @@ }, "dependencies": { "@fluentui/set-version": "^8.2.23", - "@fluentui/react-icons-mdl2": "^1.3.81", + "@fluentui/react-icons-mdl2": "^1.3.82", "tslib": "^2.1.0" }, "peerDependencies": { diff --git a/packages/react-icons-mdl2/CHANGELOG.json b/packages/react-icons-mdl2/CHANGELOG.json index 2d0eabf3d4577..c88e85870ebf0 100644 --- a/packages/react-icons-mdl2/CHANGELOG.json +++ b/packages/react-icons-mdl2/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-icons-mdl2", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/react-icons-mdl2_v1.3.82", + "version": "1.3.82", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-icons-mdl2", + "comment": "Bump @fluentui/react-icon-provider to v1.3.78", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 13 Dec 2024 07:23:12 GMT", "tag": "@fluentui/react-icons-mdl2_v1.3.81", diff --git a/packages/react-icons-mdl2/CHANGELOG.md b/packages/react-icons-mdl2/CHANGELOG.md index 922b24ecbf6d2..ffdc164ec2720 100644 --- a/packages/react-icons-mdl2/CHANGELOG.md +++ b/packages/react-icons-mdl2/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-icons-mdl2 -This log was last generated on Fri, 13 Dec 2024 07:23:12 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [1.3.82](https://github.com/microsoft/fluentui/tree/@fluentui/react-icons-mdl2_v1.3.82) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-icons-mdl2_v1.3.81..@fluentui/react-icons-mdl2_v1.3.82) + +### Patches + +- Bump @fluentui/react-icon-provider to v1.3.78 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [1.3.81](https://github.com/microsoft/fluentui/tree/@fluentui/react-icons-mdl2_v1.3.81) Fri, 13 Dec 2024 07:23:12 GMT diff --git a/packages/react-icons-mdl2/package.json b/packages/react-icons-mdl2/package.json index 95d461669d6d0..a624f56180a31 100644 --- a/packages/react-icons-mdl2/package.json +++ b/packages/react-icons-mdl2/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-icons-mdl2", - "version": "1.3.81", + "version": "1.3.82", "description": "SVG icon components for @fluentui/react", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -31,7 +31,7 @@ }, "dependencies": { "@microsoft/load-themed-styles": "^1.10.26", - "@fluentui/react-icon-provider": "^1.3.77", + "@fluentui/react-icon-provider": "^1.3.78", "@fluentui/set-version": "^8.2.23", "@fluentui/utilities": "^8.15.19", "tslib": "^2.1.0" diff --git a/packages/react-monaco-editor/CHANGELOG.json b/packages/react-monaco-editor/CHANGELOG.json index 740f2aa7273fb..30e96ac4c0ae7 100644 --- a/packages/react-monaco-editor/CHANGELOG.json +++ b/packages/react-monaco-editor/CHANGELOG.json @@ -1,6 +1,27 @@ { "name": "@fluentui/react-monaco-editor", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/react-monaco-editor_v1.7.267", + "version": "1.7.267", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-monaco-editor", + "comment": "Bump @fluentui/react to v8.122.2", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + }, + { + "author": "beachball", + "package": "@fluentui/react-monaco-editor", + "comment": "Bump @fluentui/react-charting to v5.23.29", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 20 Dec 2024 07:20:01 GMT", "tag": "@fluentui/react-monaco-editor_v1.7.266", diff --git a/packages/react-monaco-editor/CHANGELOG.md b/packages/react-monaco-editor/CHANGELOG.md index 5e394b3022200..e997cc0806155 100644 --- a/packages/react-monaco-editor/CHANGELOG.md +++ b/packages/react-monaco-editor/CHANGELOG.md @@ -1,9 +1,19 @@ # Change Log - @fluentui/react-monaco-editor -This log was last generated on Fri, 20 Dec 2024 07:20:01 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [1.7.267](https://github.com/microsoft/fluentui/tree/@fluentui/react-monaco-editor_v1.7.267) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-monaco-editor_v1.7.266..@fluentui/react-monaco-editor_v1.7.267) + +### Patches + +- Bump @fluentui/react to v8.122.2 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) +- Bump @fluentui/react-charting to v5.23.29 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [1.7.266](https://github.com/microsoft/fluentui/tree/@fluentui/react-monaco-editor_v1.7.266) Fri, 20 Dec 2024 07:20:01 GMT diff --git a/packages/react-monaco-editor/package.json b/packages/react-monaco-editor/package.json index a2341d0e51366..663949c176638 100644 --- a/packages/react-monaco-editor/package.json +++ b/packages/react-monaco-editor/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-monaco-editor", - "version": "1.7.266", + "version": "1.7.267", "description": "Live React example editing using monaco", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -29,12 +29,12 @@ "@fluentui/scripts-webpack": "*" }, "dependencies": { - "@fluentui/react": "^8.122.1", + "@fluentui/react": "^8.122.2", "@microsoft/load-themed-styles": "^1.10.26", "@fluentui/example-data": "^8.4.25", "@fluentui/monaco-editor": "^1.3.24", "@fluentui/react-hooks": "^8.8.16", - "@fluentui/react-charting": "^5.23.28", + "@fluentui/react-charting": "^5.23.29", "raw-loader": "4.0.2", "react-syntax-highlighter": "^10.1.3", "tslib": "^2.1.0" diff --git a/packages/react/CHANGELOG.json b/packages/react/CHANGELOG.json index 36540852fabb6..c948f42776450 100644 --- a/packages/react/CHANGELOG.json +++ b/packages/react/CHANGELOG.json @@ -1,6 +1,45 @@ { "name": "@fluentui/react", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/react_v8.122.2", + "version": "8.122.2", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react", + "comment": "Bump @fluentui/foundation-legacy to v8.4.23", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + }, + { + "author": "beachball", + "package": "@fluentui/react", + "comment": "Bump @fluentui/font-icons-mdl2 to v8.5.57", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + }, + { + "author": "beachball", + "package": "@fluentui/react", + "comment": "Bump @fluentui/react-focus to v8.9.20", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + }, + { + "author": "beachball", + "package": "@fluentui/react", + "comment": "Bump @fluentui/style-utilities to v8.11.6", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + }, + { + "author": "beachball", + "package": "@fluentui/react", + "comment": "Bump @fluentui/theme to v2.6.64", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 20 Dec 2024 07:20:00 GMT", "tag": "@fluentui/react_v8.122.1", diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index d1c8e9d03ad91..c8404343b171a 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -1,9 +1,22 @@ # Change Log - @fluentui/react -This log was last generated on Fri, 13 Dec 2024 07:23:12 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [8.122.2](https://github.com/microsoft/fluentui/tree/@fluentui/react_v8.122.2) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react_v8.122.1..@fluentui/react_v8.122.2) + +### Patches + +- Bump @fluentui/foundation-legacy to v8.4.23 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) +- Bump @fluentui/font-icons-mdl2 to v8.5.57 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) +- Bump @fluentui/react-focus to v8.9.20 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) +- Bump @fluentui/style-utilities to v8.11.6 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) +- Bump @fluentui/theme to v2.6.64 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [8.122.1](https://github.com/microsoft/fluentui/tree/@fluentui/react_v8.122.1) Fri, 13 Dec 2024 07:23:12 GMT diff --git a/packages/react/package.json b/packages/react/package.json index 3f47bf8370927..aadd5c64e631d 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react", - "version": "8.122.1", + "version": "8.122.2", "description": "Reusable React components for building web experiences.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -49,16 +49,16 @@ }, "dependencies": { "@fluentui/date-time-utilities": "^8.6.9", - "@fluentui/foundation-legacy": "^8.4.22", - "@fluentui/font-icons-mdl2": "^8.5.56", + "@fluentui/foundation-legacy": "^8.4.23", + "@fluentui/font-icons-mdl2": "^8.5.57", "@fluentui/merge-styles": "^8.6.13", - "@fluentui/react-focus": "^8.9.19", + "@fluentui/react-focus": "^8.9.20", "@fluentui/react-hooks": "^8.8.16", "@fluentui/react-portal-compat-context": "^9.0.13", "@fluentui/react-window-provider": "^2.2.28", "@fluentui/set-version": "^8.2.23", - "@fluentui/style-utilities": "^8.11.5", - "@fluentui/theme": "^2.6.63", + "@fluentui/style-utilities": "^8.11.6", + "@fluentui/theme": "^2.6.64", "@fluentui/utilities": "^8.15.19", "@microsoft/load-themed-styles": "^1.10.26", "tslib": "^2.1.0" diff --git a/packages/scheme-utilities/CHANGELOG.json b/packages/scheme-utilities/CHANGELOG.json index e32b174e3b411..286d4a7cce389 100644 --- a/packages/scheme-utilities/CHANGELOG.json +++ b/packages/scheme-utilities/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/scheme-utilities", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/scheme-utilities_v8.3.65", + "version": "8.3.65", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/scheme-utilities", + "comment": "Bump @fluentui/theme to v2.6.64", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 11 Oct 2024 16:51:54 GMT", "tag": "@fluentui/scheme-utilities_v8.3.64", diff --git a/packages/scheme-utilities/CHANGELOG.md b/packages/scheme-utilities/CHANGELOG.md index b29a08fa5eca2..672ba9930d593 100644 --- a/packages/scheme-utilities/CHANGELOG.md +++ b/packages/scheme-utilities/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/scheme-utilities -This log was last generated on Fri, 11 Oct 2024 16:51:54 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [8.3.65](https://github.com/microsoft/fluentui/tree/@fluentui/scheme-utilities_v8.3.65) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/scheme-utilities_v8.3.64..@fluentui/scheme-utilities_v8.3.65) + +### Patches + +- Bump @fluentui/theme to v2.6.64 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [8.3.64](https://github.com/microsoft/fluentui/tree/@fluentui/scheme-utilities_v8.3.64) Fri, 11 Oct 2024 16:51:54 GMT diff --git a/packages/scheme-utilities/package.json b/packages/scheme-utilities/package.json index 8c4ac73026bed..6e9000458bf0f 100644 --- a/packages/scheme-utilities/package.json +++ b/packages/scheme-utilities/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/scheme-utilities", - "version": "8.3.64", + "version": "8.3.65", "description": "Fluent UI React subtheme generator.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -27,7 +27,7 @@ "@fluentui/scripts-webpack": "*" }, "dependencies": { - "@fluentui/theme": "^2.6.63", + "@fluentui/theme": "^2.6.64", "@fluentui/set-version": "^8.2.23", "tslib": "^2.1.0" }, diff --git a/packages/storybook/package.json b/packages/storybook/package.json index 84dddf49a54ff..475a239e4ec6b 100644 --- a/packages/storybook/package.json +++ b/packages/storybook/package.json @@ -22,11 +22,11 @@ "@fluentui/scripts-tasks": "*" }, "dependencies": { - "@fluentui/react": "^8.122.1", - "@fluentui/theme": "^2.6.63", + "@fluentui/react": "^8.122.2", + "@fluentui/theme": "^2.6.64", "@storybook/addon-essentials": "7.6.20", - "@fluentui/azure-themes": "^8.6.114", - "@fluentui/theme-samples": "^8.7.190", + "@fluentui/azure-themes": "^8.6.115", + "@fluentui/theme-samples": "^8.7.191", "tslib": "^2.1.0" }, "peerDependencies": { diff --git a/packages/style-utilities/CHANGELOG.json b/packages/style-utilities/CHANGELOG.json index 73a4347b05adc..bd87297069b25 100644 --- a/packages/style-utilities/CHANGELOG.json +++ b/packages/style-utilities/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/style-utilities", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/style-utilities_v8.11.6", + "version": "8.11.6", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/style-utilities", + "comment": "Bump @fluentui/theme to v2.6.64", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 13 Dec 2024 07:23:12 GMT", "tag": "@fluentui/style-utilities_v8.11.5", diff --git a/packages/style-utilities/CHANGELOG.md b/packages/style-utilities/CHANGELOG.md index 83f44fad2be29..6f6a079756c1b 100644 --- a/packages/style-utilities/CHANGELOG.md +++ b/packages/style-utilities/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/style-utilities -This log was last generated on Fri, 13 Dec 2024 07:23:12 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [8.11.6](https://github.com/microsoft/fluentui/tree/@fluentui/style-utilities_v8.11.6) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/style-utilities_v8.11.5..@fluentui/style-utilities_v8.11.6) + +### Patches + +- Bump @fluentui/theme to v2.6.64 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [8.11.5](https://github.com/microsoft/fluentui/tree/@fluentui/style-utilities_v8.11.5) Fri, 13 Dec 2024 07:23:12 GMT diff --git a/packages/style-utilities/package.json b/packages/style-utilities/package.json index cb3191659822c..334e74ff56327 100644 --- a/packages/style-utilities/package.json +++ b/packages/style-utilities/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/style-utilities", - "version": "8.11.5", + "version": "8.11.6", "description": "Styling helpers for Fluent UI React.", "repository": { "type": "git", @@ -32,7 +32,7 @@ }, "dependencies": { "@microsoft/load-themed-styles": "^1.10.26", - "@fluentui/theme": "^2.6.63", + "@fluentui/theme": "^2.6.64", "@fluentui/merge-styles": "^8.6.13", "@fluentui/set-version": "^8.2.23", "@fluentui/utilities": "^8.15.19", diff --git a/packages/theme-samples/CHANGELOG.json b/packages/theme-samples/CHANGELOG.json index f94148ab5eeb5..c46b6beef089a 100644 --- a/packages/theme-samples/CHANGELOG.json +++ b/packages/theme-samples/CHANGELOG.json @@ -1,6 +1,27 @@ { "name": "@fluentui/theme-samples", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/theme-samples_v8.7.191", + "version": "8.7.191", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/theme-samples", + "comment": "Bump @fluentui/react to v8.122.2", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + }, + { + "author": "beachball", + "package": "@fluentui/theme-samples", + "comment": "Bump @fluentui/scheme-utilities to v8.3.65", + "commit": "7b4a3785c6c1d7c207602cad0a1795e3df9122ee" + } + ] + } + }, { "date": "Fri, 13 Dec 2024 07:23:12 GMT", "tag": "@fluentui/theme-samples_v8.7.190", diff --git a/packages/theme-samples/CHANGELOG.md b/packages/theme-samples/CHANGELOG.md index 065794127c86c..2b26dea032ea9 100644 --- a/packages/theme-samples/CHANGELOG.md +++ b/packages/theme-samples/CHANGELOG.md @@ -1,9 +1,19 @@ # Change Log - @fluentui/theme-samples -This log was last generated on Fri, 13 Dec 2024 07:23:12 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [8.7.191](https://github.com/microsoft/fluentui/tree/@fluentui/theme-samples_v8.7.191) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/theme-samples_v8.7.190..@fluentui/theme-samples_v8.7.191) + +### Patches + +- Bump @fluentui/react to v8.122.2 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) +- Bump @fluentui/scheme-utilities to v8.3.65 ([PR #33445](https://github.com/microsoft/fluentui/pull/33445) by beachball) + ## [8.7.190](https://github.com/microsoft/fluentui/tree/@fluentui/theme-samples_v8.7.190) Fri, 13 Dec 2024 07:23:12 GMT diff --git a/packages/theme-samples/package.json b/packages/theme-samples/package.json index da948c6ead801..f6e4dddae6f30 100644 --- a/packages/theme-samples/package.json +++ b/packages/theme-samples/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/theme-samples", - "version": "8.7.190", + "version": "8.7.191", "description": "Sample themes for use with Fabric components.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -26,9 +26,9 @@ "@fluentui/scripts-webpack": "*" }, "dependencies": { - "@fluentui/react": "^8.122.1", + "@fluentui/react": "^8.122.2", "@fluentui/set-version": "^8.2.23", - "@fluentui/scheme-utilities": "^8.3.64", + "@fluentui/scheme-utilities": "^8.3.65", "tslib": "^2.1.0" }, "exports": { diff --git a/packages/theme/CHANGELOG.json b/packages/theme/CHANGELOG.json index 94b391e3427fd..383c73f51fa8f 100644 --- a/packages/theme/CHANGELOG.json +++ b/packages/theme/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/theme", "entries": [ + { + "date": "Mon, 23 Dec 2024 07:22:58 GMT", + "tag": "@fluentui/theme_v2.6.64", + "version": "2.6.64", + "comments": { + "patch": [ + { + "author": "olfedias@microsoft.com", + "package": "@fluentui/theme", + "commit": "dc7bb663e3d93a19b611cf1892556d69c57b1269", + "comment": "chore: remove usage of \"export *\"" + } + ] + } + }, { "date": "Tue, 05 Nov 2024 00:59:52 GMT", "tag": "@fluentui/theme_v2.6.63", diff --git a/packages/theme/CHANGELOG.md b/packages/theme/CHANGELOG.md index 3bc704261e691..a6e4242eb6dce 100644 --- a/packages/theme/CHANGELOG.md +++ b/packages/theme/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/theme -This log was last generated on Fri, 11 Oct 2024 16:51:54 GMT and should not be manually modified. +This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +## [2.6.64](https://github.com/microsoft/fluentui/tree/@fluentui/theme_v2.6.64) + +Mon, 23 Dec 2024 07:22:58 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/theme_v2.6.63..@fluentui/theme_v2.6.64) + +### Patches + +- chore: remove usage of "export *" ([PR #33448](https://github.com/microsoft/fluentui/pull/33448) by olfedias@microsoft.com) + ## [2.6.63](https://github.com/microsoft/fluentui/tree/@fluentui/theme_v2.6.63) Fri, 11 Oct 2024 16:51:54 GMT diff --git a/packages/theme/package.json b/packages/theme/package.json index f5c8396cf6f5a..268aac8ec4cfe 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/theme", - "version": "2.6.63", + "version": "2.6.64", "description": "Basic building blocks for Fluent UI React Component themes", "main": "lib-commonjs/index.js", "module": "lib/index.js", From fa08fec97a5bc070e2866633c792f7066f0c86e8 Mon Sep 17 00:00:00 2001 From: srmukher <120183316+srmukher@users.noreply.github.com> Date: Tue, 24 Dec 2024 22:57:46 +0530 Subject: [PATCH 15/24] [Donut] Legends multi selection for Donut Charts (#33447) --- ...-57a1c519-224f-4da6-bdd9-bfc7decab0f7.json | 7 ++ .../DeclarativeChart/DeclarativeChart.tsx | 2 +- .../src/components/DonutChart/Arc/Arc.tsx | 20 +++-- .../components/DonutChart/Arc/Arc.types.ts | 2 +- .../components/DonutChart/DonutChart.base.tsx | 75 +++++++++++++------ .../DonutChart/DonutChartRTL.test.tsx | 40 +++++++++- .../components/DonutChart/Pie/Pie.types.ts | 2 +- .../DonutChart/DonutChart.Basic.Example.tsx | 75 ++++++++++++++++++- 8 files changed, 183 insertions(+), 40 deletions(-) create mode 100644 change/@fluentui-react-charting-57a1c519-224f-4da6-bdd9-bfc7decab0f7.json diff --git a/change/@fluentui-react-charting-57a1c519-224f-4da6-bdd9-bfc7decab0f7.json b/change/@fluentui-react-charting-57a1c519-224f-4da6-bdd9-bfc7decab0f7.json new file mode 100644 index 0000000000000..79123ffb677ff --- /dev/null +++ b/change/@fluentui-react-charting-57a1c519-224f-4da6-bdd9-bfc7decab0f7.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Legends multi selection for Donut Charts", + "packageName": "@fluentui/react-charting", + "email": "120183316+srmukher@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/packages/charts/react-charting/src/components/DeclarativeChart/DeclarativeChart.tsx b/packages/charts/react-charting/src/components/DeclarativeChart/DeclarativeChart.tsx index 9929b993f178a..5ee0c2e35ebb3 100644 --- a/packages/charts/react-charting/src/components/DeclarativeChart/DeclarativeChart.tsx +++ b/packages/charts/react-charting/src/components/DeclarativeChart/DeclarativeChart.tsx @@ -129,7 +129,7 @@ export const DeclarativeChart: React.FunctionComponent = return ( ); diff --git a/packages/charts/react-charting/src/components/DonutChart/Arc/Arc.tsx b/packages/charts/react-charting/src/components/DonutChart/Arc/Arc.tsx index 7d7baef968045..ff1b9a261948b 100644 --- a/packages/charts/react-charting/src/components/DonutChart/Arc/Arc.tsx +++ b/packages/charts/react-charting/src/components/DonutChart/Arc/Arc.tsx @@ -31,12 +31,11 @@ export class Arc extends React.Component { } public render(): JSX.Element { - const { arc, href, focusedArcId } = this.props; + const { arc, href, focusedArcId, activeArc } = this.props; const getClassNames = classNamesFunction(); const id = this.props.uniqText! + this.props.data!.data.legend!.replace(/\s+/, '') + this.props.data!.data.data; const opacity: number = - this.props.activeArc === this.props.data!.data.legend || this.props.activeArc === '' ? 1 : 0.1; - + activeArc && activeArc.length > 0 ? (activeArc.includes(this.props.data?.data.legend!) ? 1 : 0.1) : 1; const startAngle = this.props.data?.startAngle ?? 0; const endAngle = (this.props.data?.endAngle ?? 0) - startAngle; const cornerRadius = this.props.roundCorners ? 3 : 0; @@ -70,7 +69,9 @@ export class Arc extends React.Component { d={arc.cornerRadius(cornerRadius)(this.props.data)} onFocus={this._onFocus.bind(this, this.props.data!.data, id)} className={classNames.root} - data-is-focusable={this.props.activeArc === this.props.data!.data.legend || this.props.activeArc === ''} + data-is-focusable={ + this._shouldHighlightArc(this.props.data!.data.legend!) || this.props.activeArc?.length === 0 + } onMouseOver={this._hoverOn.bind(this, this.props.data!.data)} onMouseMove={this._hoverOn.bind(this, this.props.data!.data)} onMouseLeave={this._hoverOff} @@ -123,13 +124,18 @@ export class Arc extends React.Component { return point.callOutAccessibilityData?.ariaLabel || (legend ? `${legend}, ` : '') + `${yValue}.`; }; - private _renderArcLabel = (className: string) => { - const { arc, data, innerRadius, outerRadius, showLabelsInPercent, totalValue, hideLabels, activeArc } = this.props; + private _shouldHighlightArc = (legend?: string): boolean => { + const { activeArc } = this.props; + // If no activeArc is provided, highlight all arcs. Otherwise, only highlight the arcs that are active. + return !activeArc || activeArc.length === 0 || legend === undefined || activeArc.includes(legend); + }; + private _renderArcLabel = (className: string) => { + const { arc, data, innerRadius, outerRadius, showLabelsInPercent, totalValue, hideLabels } = this.props; if ( hideLabels || Math.abs(data!.endAngle - data!.startAngle) < Math.PI / 12 || - (activeArc !== data!.data.legend && activeArc !== '') + !this._shouldHighlightArc(data!.data.legend!) ) { return null; } diff --git a/packages/charts/react-charting/src/components/DonutChart/Arc/Arc.types.ts b/packages/charts/react-charting/src/components/DonutChart/Arc/Arc.types.ts index 6de0cdd0afc77..6bff5071cd7e6 100644 --- a/packages/charts/react-charting/src/components/DonutChart/Arc/Arc.types.ts +++ b/packages/charts/react-charting/src/components/DonutChart/Arc/Arc.types.ts @@ -73,7 +73,7 @@ export interface IArcProps { /** * Active Arc for chart */ - activeArc?: string; + activeArc?: string[]; /** * internal prop for href diff --git a/packages/charts/react-charting/src/components/DonutChart/DonutChart.base.tsx b/packages/charts/react-charting/src/components/DonutChart/DonutChart.base.tsx index ff04507c955bb..fb747b57d5fef 100644 --- a/packages/charts/react-charting/src/components/DonutChart/DonutChart.base.tsx +++ b/packages/charts/react-charting/src/components/DonutChart/DonutChart.base.tsx @@ -25,9 +25,9 @@ export interface IDonutChartState { xCalloutValue?: string; yCalloutValue?: string; focusedArcId?: string; - selectedLegend: string; dataPointCalloutProps?: IChartDataPoint; callOutAccessibilityData?: IAccessibilityProps; + selectedLegends: string[]; } export class DonutChartBase extends React.Component implements IChart { @@ -73,12 +73,12 @@ export class DonutChartBase extends React.Component d.data! >= 0)); const valueInsideDonut = this._valueInsideDonut(this.props.valueInsideDonut!, chartData!); - return !this._isChartEmpty() ? (
{ - if (this.state.selectedLegend === point.legend) { - this.setState({ selectedLegend: '' }); - } else { - this.setState({ selectedLegend: point.legend! }); - } - }, hoverAction: () => { this._handleChartMouseLeave(); this.setState({ activeLegend: point.legend! }); }, onMouseOutAction: () => { - this.setState({ activeLegend: '' }); + this.setState({ activeLegend: undefined }); }, }; return legend; }); + const legends = ( ); return legends; } + private _onLegendSelectionChange( + selectedLegends: string[], + event: React.MouseEvent, + currentLegend?: ILegend, + ): void { + if (this.props.legendProps && this.props.legendProps?.canSelectMultipleLegends) { + this.setState({ selectedLegends }); + } else { + this.setState({ selectedLegends: selectedLegends.slice(-1) }); + } + if (this.props.legendProps?.onChange) { + this.props.legendProps.onChange(selectedLegends, event, currentLegend); + } + } + private _focusCallback = (data: IChartDataPoint, id: string, element: SVGPathElement): void => { this._currentHoverElement = element; this.setState({ /** Show the callout if highlighted arc is focused and Hide it if unhighlighted arc is focused */ - showHover: this.state.selectedLegend === '' || this.state.selectedLegend === data.legend, + showHover: this._noLegendsHighlighted() || this._isLegendHighlighted(data.legend), value: data.data!.toString(), legend: data.legend, color: data.color!, @@ -307,7 +317,7 @@ export class DonutChartBase extends React.Component { - if (point.legend === highlightedLegend || (this.state.showHover && point.legend === this.state.legend)) { - legendValue = point.yAxisCalloutData ? point.yAxisCalloutData : point.data!; + const highlightedLegends = this._getHighlightedLegend(); + if (valueInsideDonut !== undefined && (highlightedLegends.length === 1 || this.state.showHover)) { + const pointValue = data.find(point => this._isLegendHighlighted(point.legend)); + return pointValue + ? pointValue.yAxisCalloutData + ? pointValue.yAxisCalloutData + : pointValue.data! + : valueInsideDonut; + } else if (highlightedLegends.length > 0) { + let totalValue = 0; + data.forEach(point => { + if (highlightedLegends.includes(point.legend!)) { + totalValue += point.data!; } - return; }); - return legendValue; + return totalValue; } else { return valueInsideDonut; } @@ -359,12 +375,23 @@ export class DonutChartBase extends React.Component 0 + ? this.state.selectedLegends + : this.state.activeLegend + ? [this.state.activeLegend] + : []; } + private _isLegendHighlighted = (legend: string | undefined): boolean => { + return this._getHighlightedLegend().includes(legend!); + }; + + private _noLegendsHighlighted = (): boolean => { + return this._getHighlightedLegend().length === 0; + }; + private _isChartEmpty(): boolean { return !( this.props.data && diff --git a/packages/charts/react-charting/src/components/DonutChart/DonutChartRTL.test.tsx b/packages/charts/react-charting/src/components/DonutChart/DonutChartRTL.test.tsx index db7dcb00b7e58..16bb8f56bc206 100644 --- a/packages/charts/react-charting/src/components/DonutChart/DonutChartRTL.test.tsx +++ b/packages/charts/react-charting/src/components/DonutChart/DonutChartRTL.test.tsx @@ -18,6 +18,9 @@ describe('Donut chart interactions', () => { beforeEach(() => { sharedBeforeEach(); jest.spyOn(global.Math, 'random').mockReturnValue(0.1); + // Mock the implementation of wrapTextInsideDonut as it internally calls a Browser Function like + // getComputedTextLength() which will otherwise lead to a crash if mounted + jest.spyOn(utils, 'wrapTextInsideDonut').mockImplementation(() => '20000'); }); afterEach(() => { jest.spyOn(global.Math, 'random').mockRestore(); @@ -70,7 +73,7 @@ describe('Donut chart interactions', () => { test('Should highlight the corresponding Pie on mouse over on legends', () => { // Arrange - const { container } = render(); + const { container } = render(); // Act const legend = screen.queryByText('first'); @@ -157,9 +160,6 @@ describe('Donut chart interactions', () => { }); test('Should change value inside donut with the legend value on mouseOver legend ', () => { - // Mock the implementation of wrapTextInsideDonut as it internally calls a Browser Function like - // getComputedTextLength() which will otherwise lead to a crash if mounted - jest.spyOn(utils, 'wrapTextInsideDonut').mockImplementation(() => '1000'); // Arrange const { container } = render( , @@ -184,6 +184,38 @@ describe('Donut chart interactions', () => { // Assert expect(container).toMatchSnapshot(); }); + + // add test for legend multi select + test('Should select multiple legends on click', () => { + // Arrange + const { container } = render( + , + ); + + // Act + const firstLegend = screen.queryByText('first')?.closest('button'); + const secondLegend = screen.queryByText('second')?.closest('button'); + expect(firstLegend).toBeDefined(); + expect(secondLegend).toBeDefined(); + fireEvent.click(firstLegend!); + fireEvent.click(secondLegend!); + + // Assert + expect(firstLegend).toHaveAttribute('aria-selected', 'true'); + expect(secondLegend).toHaveAttribute('aria-selected', 'true'); + + const getById = queryAllByAttribute.bind(null, 'id'); + expect(getById(container, /Pie.*?first/i)[0]).toHaveStyle('opacity: 1.0'); + expect(getById(container, /Pie.*?second/i)[0]).toHaveStyle('opacity: 1.0'); + expect(getById(container, /Pie.*?third/i)[0]).toHaveStyle('opacity: 0.1'); + }); }); describe('Donut Chart - axe-core', () => { diff --git a/packages/charts/react-charting/src/components/DonutChart/Pie/Pie.types.ts b/packages/charts/react-charting/src/components/DonutChart/Pie/Pie.types.ts index aa9ca9b2dc44a..f5629edf8aede 100644 --- a/packages/charts/react-charting/src/components/DonutChart/Pie/Pie.types.ts +++ b/packages/charts/react-charting/src/components/DonutChart/Pie/Pie.types.ts @@ -54,7 +54,7 @@ export interface IPieProps { /** * Active Arc for chart */ - activeArc?: string; + activeArc?: string[]; /** * string for callout id diff --git a/packages/react-examples/src/react-charting/DonutChart/DonutChart.Basic.Example.tsx b/packages/react-examples/src/react-charting/DonutChart/DonutChart.Basic.Example.tsx index 71be65bd695da..ac96c767bef0e 100644 --- a/packages/react-examples/src/react-charting/DonutChart/DonutChart.Basic.Example.tsx +++ b/packages/react-examples/src/react-charting/DonutChart/DonutChart.Basic.Example.tsx @@ -14,6 +14,7 @@ import { Toggle } from '@fluentui/react/lib/Toggle'; interface IDonutChartState { enableGradient: boolean; roundCorners: boolean; + legendMultiSelect: boolean; } export class DonutChartBasicExample extends React.Component { @@ -22,6 +23,7 @@ export class DonutChartBasicExample extends React.Component +    +
); @@ -92,4 +159,8 @@ export class DonutChartBasicExample extends React.Component, checked: boolean) => { this.setState({ roundCorners: checked }); }; + + private _onToggleLegendMultiSelect = (ev: React.MouseEvent, checked: boolean) => { + this.setState({ legendMultiSelect: checked }); + }; } From a4ad322515aa69f99e244899a12338df6e2ee0a6 Mon Sep 17 00:00:00 2001 From: Fluent UI Build Date: Wed, 25 Dec 2024 07:22:14 +0000 Subject: [PATCH 16/24] release: applying package updates - react v8 --- ...ting-57a1c519-224f-4da6-bdd9-bfc7decab0f7.json | 7 ------- packages/charts/react-charting/CHANGELOG.json | 15 +++++++++++++++ packages/charts/react-charting/CHANGELOG.md | 11 ++++++++++- packages/charts/react-charting/package.json | 2 +- packages/react-docsite-components/CHANGELOG.json | 15 +++++++++++++++ packages/react-docsite-components/CHANGELOG.md | 11 ++++++++++- packages/react-docsite-components/package.json | 4 ++-- packages/react-examples/package.json | 4 ++-- packages/react-monaco-editor/CHANGELOG.json | 15 +++++++++++++++ packages/react-monaco-editor/CHANGELOG.md | 11 ++++++++++- packages/react-monaco-editor/package.json | 4 ++-- 11 files changed, 82 insertions(+), 17 deletions(-) delete mode 100644 change/@fluentui-react-charting-57a1c519-224f-4da6-bdd9-bfc7decab0f7.json diff --git a/change/@fluentui-react-charting-57a1c519-224f-4da6-bdd9-bfc7decab0f7.json b/change/@fluentui-react-charting-57a1c519-224f-4da6-bdd9-bfc7decab0f7.json deleted file mode 100644 index 79123ffb677ff..0000000000000 --- a/change/@fluentui-react-charting-57a1c519-224f-4da6-bdd9-bfc7decab0f7.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "patch", - "comment": "Legends multi selection for Donut Charts", - "packageName": "@fluentui/react-charting", - "email": "120183316+srmukher@users.noreply.github.com", - "dependentChangeType": "patch" -} diff --git a/packages/charts/react-charting/CHANGELOG.json b/packages/charts/react-charting/CHANGELOG.json index 62c4a5ee6b2b3..a1290a4174195 100644 --- a/packages/charts/react-charting/CHANGELOG.json +++ b/packages/charts/react-charting/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-charting", "entries": [ + { + "date": "Wed, 25 Dec 2024 07:21:55 GMT", + "tag": "@fluentui/react-charting_v5.23.30", + "version": "5.23.30", + "comments": { + "patch": [ + { + "author": "120183316+srmukher@users.noreply.github.com", + "package": "@fluentui/react-charting", + "commit": "fa08fec97a5bc070e2866633c792f7066f0c86e8", + "comment": "Legends multi selection for Donut Charts" + } + ] + } + }, { "date": "Mon, 23 Dec 2024 07:22:57 GMT", "tag": "@fluentui/react-charting_v5.23.29", diff --git a/packages/charts/react-charting/CHANGELOG.md b/packages/charts/react-charting/CHANGELOG.md index 9bdb6d599f8e0..297a6499e5848 100644 --- a/packages/charts/react-charting/CHANGELOG.md +++ b/packages/charts/react-charting/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-charting -This log was last generated on Mon, 23 Dec 2024 07:22:57 GMT and should not be manually modified. +This log was last generated on Wed, 25 Dec 2024 07:21:55 GMT and should not be manually modified. +## [5.23.30](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.23.30) + +Wed, 25 Dec 2024 07:21:55 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.23.29..@fluentui/react-charting_v5.23.30) + +### Patches + +- Legends multi selection for Donut Charts ([PR #33447](https://github.com/microsoft/fluentui/pull/33447) by 120183316+srmukher@users.noreply.github.com) + ## [5.23.29](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.23.29) Mon, 23 Dec 2024 07:22:57 GMT diff --git a/packages/charts/react-charting/package.json b/packages/charts/react-charting/package.json index 420f95e214f4e..5d352d2237ed9 100644 --- a/packages/charts/react-charting/package.json +++ b/packages/charts/react-charting/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-charting", - "version": "5.23.29", + "version": "5.23.30", "description": "React web charting controls for Microsoft fluentui system.", "main": "lib-commonjs/index.js", "module": "lib/index.js", diff --git a/packages/react-docsite-components/CHANGELOG.json b/packages/react-docsite-components/CHANGELOG.json index bc9a43ebeed16..47cdf4f6d6e57 100644 --- a/packages/react-docsite-components/CHANGELOG.json +++ b/packages/react-docsite-components/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-docsite-components", "entries": [ + { + "date": "Wed, 25 Dec 2024 07:21:56 GMT", + "tag": "@fluentui/react-docsite-components_v8.13.150", + "version": "8.13.150", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-docsite-components", + "comment": "Bump @fluentui/react-monaco-editor to v1.7.268", + "commit": "fa08fec97a5bc070e2866633c792f7066f0c86e8" + } + ] + } + }, { "date": "Mon, 23 Dec 2024 07:22:58 GMT", "tag": "@fluentui/react-docsite-components_v8.13.149", diff --git a/packages/react-docsite-components/CHANGELOG.md b/packages/react-docsite-components/CHANGELOG.md index f71fd3cbdf35c..a9f8fee7d6bdc 100644 --- a/packages/react-docsite-components/CHANGELOG.md +++ b/packages/react-docsite-components/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-docsite-components -This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +This log was last generated on Wed, 25 Dec 2024 07:21:56 GMT and should not be manually modified. +## [8.13.150](https://github.com/microsoft/fluentui/tree/@fluentui/react-docsite-components_v8.13.150) + +Wed, 25 Dec 2024 07:21:56 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-docsite-components_v8.13.149..@fluentui/react-docsite-components_v8.13.150) + +### Patches + +- Bump @fluentui/react-monaco-editor to v1.7.268 ([PR #33447](https://github.com/microsoft/fluentui/pull/33447) by beachball) + ## [8.13.149](https://github.com/microsoft/fluentui/tree/@fluentui/react-docsite-components_v8.13.149) Mon, 23 Dec 2024 07:22:58 GMT diff --git a/packages/react-docsite-components/package.json b/packages/react-docsite-components/package.json index 8a4f24a6c2162..3c3d59cde2526 100644 --- a/packages/react-docsite-components/package.json +++ b/packages/react-docsite-components/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-docsite-components", - "version": "8.13.149", + "version": "8.13.150", "description": "Fluent UI React components for building documentation sites.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -42,7 +42,7 @@ "@fluentui/public-docsite-setup": "^0.3.34", "@fluentui/react-hooks": "^8.8.16", "@fluentui/set-version": "^8.2.23", - "@fluentui/react-monaco-editor": "^1.7.267", + "@fluentui/react-monaco-editor": "^1.7.268", "color-check": "0.0.2", "markdown-to-jsx": "^7.0.0", "office-ui-fabric-core": "^11.0.0", diff --git a/packages/react-examples/package.json b/packages/react-examples/package.json index f1089434d4c4c..7500fb3bdea62 100644 --- a/packages/react-examples/package.json +++ b/packages/react-examples/package.json @@ -36,8 +36,8 @@ "@fluentui/merge-styles": "^8.6.13", "@fluentui/react": "^8.122.2", "@fluentui/react-cards": "^0.205.191", - "@fluentui/react-charting": "^5.23.29", - "@fluentui/react-docsite-components": "^8.13.149", + "@fluentui/react-charting": "^5.23.30", + "@fluentui/react-docsite-components": "^8.13.150", "@fluentui/react-experiments": "^8.14.188", "@fluentui/react-file-type-icons": "^8.12.7", "@fluentui/react-focus": "^8.9.20", diff --git a/packages/react-monaco-editor/CHANGELOG.json b/packages/react-monaco-editor/CHANGELOG.json index 30e96ac4c0ae7..de58bcfb15944 100644 --- a/packages/react-monaco-editor/CHANGELOG.json +++ b/packages/react-monaco-editor/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-monaco-editor", "entries": [ + { + "date": "Wed, 25 Dec 2024 07:21:56 GMT", + "tag": "@fluentui/react-monaco-editor_v1.7.268", + "version": "1.7.268", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-monaco-editor", + "comment": "Bump @fluentui/react-charting to v5.23.30", + "commit": "fa08fec97a5bc070e2866633c792f7066f0c86e8" + } + ] + } + }, { "date": "Mon, 23 Dec 2024 07:22:58 GMT", "tag": "@fluentui/react-monaco-editor_v1.7.267", diff --git a/packages/react-monaco-editor/CHANGELOG.md b/packages/react-monaco-editor/CHANGELOG.md index e997cc0806155..248cdd46384ed 100644 --- a/packages/react-monaco-editor/CHANGELOG.md +++ b/packages/react-monaco-editor/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-monaco-editor -This log was last generated on Mon, 23 Dec 2024 07:22:58 GMT and should not be manually modified. +This log was last generated on Wed, 25 Dec 2024 07:21:56 GMT and should not be manually modified. +## [1.7.268](https://github.com/microsoft/fluentui/tree/@fluentui/react-monaco-editor_v1.7.268) + +Wed, 25 Dec 2024 07:21:56 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-monaco-editor_v1.7.267..@fluentui/react-monaco-editor_v1.7.268) + +### Patches + +- Bump @fluentui/react-charting to v5.23.30 ([PR #33447](https://github.com/microsoft/fluentui/pull/33447) by beachball) + ## [1.7.267](https://github.com/microsoft/fluentui/tree/@fluentui/react-monaco-editor_v1.7.267) Mon, 23 Dec 2024 07:22:58 GMT diff --git a/packages/react-monaco-editor/package.json b/packages/react-monaco-editor/package.json index 663949c176638..627aac1d5546b 100644 --- a/packages/react-monaco-editor/package.json +++ b/packages/react-monaco-editor/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-monaco-editor", - "version": "1.7.267", + "version": "1.7.268", "description": "Live React example editing using monaco", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -34,7 +34,7 @@ "@fluentui/example-data": "^8.4.25", "@fluentui/monaco-editor": "^1.3.24", "@fluentui/react-hooks": "^8.8.16", - "@fluentui/react-charting": "^5.23.29", + "@fluentui/react-charting": "^5.23.30", "raw-loader": "4.0.2", "react-syntax-highlighter": "^10.1.3", "tslib": "^2.1.0" From 524e65e70d0bf54e594a8f3d6e087c7ea49fd845 Mon Sep 17 00:00:00 2001 From: Caitlin Hogan Date: Wed, 25 Dec 2024 02:48:12 -0800 Subject: [PATCH 17/24] Remove typo in DismissAll.stories.tsx (#33504) --- .../react-toast/stories/src/Toast/DismissAll.stories.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-components/react-toast/stories/src/Toast/DismissAll.stories.tsx b/packages/react-components/react-toast/stories/src/Toast/DismissAll.stories.tsx index a7788ea9cc833..6bda21d352b60 100644 --- a/packages/react-components/react-toast/stories/src/Toast/DismissAll.stories.tsx +++ b/packages/react-components/react-toast/stories/src/Toast/DismissAll.stories.tsx @@ -7,7 +7,7 @@ export const DismissAll = () => { const notify = () => dispatchToast( - 'This is a toast + This is a toast , { intent: 'info' }, ); From 0dd9a713b54a6d5b5929ac7febd1c7e44c83efca Mon Sep 17 00:00:00 2001 From: krkshitij <110246001+krkshitij@users.noreply.github.com> Date: Thu, 26 Dec 2024 11:07:36 +0530 Subject: [PATCH 18/24] fix(react-charting): remove duplicate legends in vertical bar chart (#33518) --- ...-a75da9fd-a90e-4ca9-818e-c51075622f51.json | 7 + .../DeclarativeChart/PlotlySchemaAdapter.ts | 2 +- .../VerticalBarChart.base.tsx | 10 +- .../VerticalBarChartRTL.test.tsx.snap | 300 +----------------- 4 files changed, 19 insertions(+), 300 deletions(-) create mode 100644 change/@fluentui-react-charting-a75da9fd-a90e-4ca9-818e-c51075622f51.json diff --git a/change/@fluentui-react-charting-a75da9fd-a90e-4ca9-818e-c51075622f51.json b/change/@fluentui-react-charting-a75da9fd-a90e-4ca9-818e-c51075622f51.json new file mode 100644 index 0000000000000..5c658af25bb30 --- /dev/null +++ b/change/@fluentui-react-charting-a75da9fd-a90e-4ca9-818e-c51075622f51.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "fix: remove duplicate legends in vertical bar chart", + "packageName": "@fluentui/react-charting", + "email": "110246001+krkshitij@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/packages/charts/react-charting/src/components/DeclarativeChart/PlotlySchemaAdapter.ts b/packages/charts/react-charting/src/components/DeclarativeChart/PlotlySchemaAdapter.ts index 368fbda214df2..1339f1827c2be 100644 --- a/packages/charts/react-charting/src/components/DeclarativeChart/PlotlySchemaAdapter.ts +++ b/packages/charts/react-charting/src/components/DeclarativeChart/PlotlySchemaAdapter.ts @@ -259,7 +259,7 @@ export const transformPlotlyJsonToVBCProps = ( chartTitle: typeof layout?.title === 'string' ? layout?.title : '', // width: layout?.width, // height: layout?.height, - hideLegend: true, + // hideLegend: true, barWidth: 24, supportNegativeData: true, }; diff --git a/packages/charts/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx b/packages/charts/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx index 0132072838762..5159a77012108 100644 --- a/packages/charts/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx +++ b/packages/charts/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx @@ -1079,6 +1079,7 @@ export class VerticalBarChartBase const { theme, useSingleColor } = this.props; const { lineLegendText, lineLegendColor = theme!.palette.yellow } = this.props; const actions: ILegend[] = []; + const mapLegendToColor: Record = {}; data.forEach((point: IVerticalBarChartDataPoint, _index: number) => { let color: string = !useSingleColor ? point.color! : this._createColors()(1); @@ -1090,16 +1091,19 @@ export class VerticalBarChartBase } } + mapLegendToColor[point.legend!] = color; + }); + Object.entries(mapLegendToColor).forEach(([legendTitle, color]) => { // mapping data to the format Legends component needs const legend: ILegend = { - title: point.legend!, + title: legendTitle, color, action: () => { - this._onLegendClick(point.legend!); + this._onLegendClick(legendTitle); }, hoverAction: () => { this._handleChartMouseLeave(); - this._onLegendHover(point.legend!); + this._onLegendHover(legendTitle); }, onMouseOutAction: () => { this._onLegendLeave(); diff --git a/packages/charts/react-charting/src/components/VerticalBarChart/__snapshots__/VerticalBarChartRTL.test.tsx.snap b/packages/charts/react-charting/src/components/VerticalBarChart/__snapshots__/VerticalBarChartRTL.test.tsx.snap index 885b42fed8c1d..7107331244fac 100644 --- a/packages/charts/react-charting/src/components/VerticalBarChart/__snapshots__/VerticalBarChartRTL.test.tsx.snap +++ b/packages/charts/react-charting/src/components/VerticalBarChart/__snapshots__/VerticalBarChartRTL.test.tsx.snap @@ -14400,7 +14400,7 @@ exports[`Vertical bar chart rendering Should render the vertical bar chart with aria-label="undefined" aria-posinset="1" aria-selected="false" - aria-setsize="4" + aria-setsize="1" class= { @@ -14455,300 +14455,6 @@ exports[`Vertical bar chart rendering Should render the vertical bar chart with
-
- -
-
- -
-
- -
-
-
From bdba671e2e009a5530ac700ee62840b649b685b3 Mon Sep 17 00:00:00 2001 From: Fluent UI Build Date: Thu, 26 Dec 2024 07:21:32 +0000 Subject: [PATCH 19/24] release: applying package updates - react v8 --- ...ting-a75da9fd-a90e-4ca9-818e-c51075622f51.json | 7 ------- packages/charts/react-charting/CHANGELOG.json | 15 +++++++++++++++ packages/charts/react-charting/CHANGELOG.md | 11 ++++++++++- packages/charts/react-charting/package.json | 2 +- packages/react-docsite-components/CHANGELOG.json | 15 +++++++++++++++ packages/react-docsite-components/CHANGELOG.md | 11 ++++++++++- packages/react-docsite-components/package.json | 4 ++-- packages/react-examples/package.json | 4 ++-- packages/react-monaco-editor/CHANGELOG.json | 15 +++++++++++++++ packages/react-monaco-editor/CHANGELOG.md | 11 ++++++++++- packages/react-monaco-editor/package.json | 4 ++-- 11 files changed, 82 insertions(+), 17 deletions(-) delete mode 100644 change/@fluentui-react-charting-a75da9fd-a90e-4ca9-818e-c51075622f51.json diff --git a/change/@fluentui-react-charting-a75da9fd-a90e-4ca9-818e-c51075622f51.json b/change/@fluentui-react-charting-a75da9fd-a90e-4ca9-818e-c51075622f51.json deleted file mode 100644 index 5c658af25bb30..0000000000000 --- a/change/@fluentui-react-charting-a75da9fd-a90e-4ca9-818e-c51075622f51.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "patch", - "comment": "fix: remove duplicate legends in vertical bar chart", - "packageName": "@fluentui/react-charting", - "email": "110246001+krkshitij@users.noreply.github.com", - "dependentChangeType": "patch" -} diff --git a/packages/charts/react-charting/CHANGELOG.json b/packages/charts/react-charting/CHANGELOG.json index a1290a4174195..544d5695e1975 100644 --- a/packages/charts/react-charting/CHANGELOG.json +++ b/packages/charts/react-charting/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-charting", "entries": [ + { + "date": "Thu, 26 Dec 2024 07:21:14 GMT", + "tag": "@fluentui/react-charting_v5.23.31", + "version": "5.23.31", + "comments": { + "patch": [ + { + "author": "110246001+krkshitij@users.noreply.github.com", + "package": "@fluentui/react-charting", + "commit": "0dd9a713b54a6d5b5929ac7febd1c7e44c83efca", + "comment": "fix: remove duplicate legends in vertical bar chart" + } + ] + } + }, { "date": "Wed, 25 Dec 2024 07:21:55 GMT", "tag": "@fluentui/react-charting_v5.23.30", diff --git a/packages/charts/react-charting/CHANGELOG.md b/packages/charts/react-charting/CHANGELOG.md index 297a6499e5848..b442b9b82e387 100644 --- a/packages/charts/react-charting/CHANGELOG.md +++ b/packages/charts/react-charting/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-charting -This log was last generated on Wed, 25 Dec 2024 07:21:55 GMT and should not be manually modified. +This log was last generated on Thu, 26 Dec 2024 07:21:14 GMT and should not be manually modified. +## [5.23.31](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.23.31) + +Thu, 26 Dec 2024 07:21:14 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charting_v5.23.30..@fluentui/react-charting_v5.23.31) + +### Patches + +- fix: remove duplicate legends in vertical bar chart ([PR #33518](https://github.com/microsoft/fluentui/pull/33518) by 110246001+krkshitij@users.noreply.github.com) + ## [5.23.30](https://github.com/microsoft/fluentui/tree/@fluentui/react-charting_v5.23.30) Wed, 25 Dec 2024 07:21:55 GMT diff --git a/packages/charts/react-charting/package.json b/packages/charts/react-charting/package.json index 5d352d2237ed9..2cd7632a4fd70 100644 --- a/packages/charts/react-charting/package.json +++ b/packages/charts/react-charting/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-charting", - "version": "5.23.30", + "version": "5.23.31", "description": "React web charting controls for Microsoft fluentui system.", "main": "lib-commonjs/index.js", "module": "lib/index.js", diff --git a/packages/react-docsite-components/CHANGELOG.json b/packages/react-docsite-components/CHANGELOG.json index 47cdf4f6d6e57..78bf626151878 100644 --- a/packages/react-docsite-components/CHANGELOG.json +++ b/packages/react-docsite-components/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-docsite-components", "entries": [ + { + "date": "Thu, 26 Dec 2024 07:21:14 GMT", + "tag": "@fluentui/react-docsite-components_v8.13.151", + "version": "8.13.151", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-docsite-components", + "comment": "Bump @fluentui/react-monaco-editor to v1.7.269", + "commit": "0dd9a713b54a6d5b5929ac7febd1c7e44c83efca" + } + ] + } + }, { "date": "Wed, 25 Dec 2024 07:21:56 GMT", "tag": "@fluentui/react-docsite-components_v8.13.150", diff --git a/packages/react-docsite-components/CHANGELOG.md b/packages/react-docsite-components/CHANGELOG.md index a9f8fee7d6bdc..f7655bfe68fee 100644 --- a/packages/react-docsite-components/CHANGELOG.md +++ b/packages/react-docsite-components/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-docsite-components -This log was last generated on Wed, 25 Dec 2024 07:21:56 GMT and should not be manually modified. +This log was last generated on Thu, 26 Dec 2024 07:21:14 GMT and should not be manually modified. +## [8.13.151](https://github.com/microsoft/fluentui/tree/@fluentui/react-docsite-components_v8.13.151) + +Thu, 26 Dec 2024 07:21:14 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-docsite-components_v8.13.150..@fluentui/react-docsite-components_v8.13.151) + +### Patches + +- Bump @fluentui/react-monaco-editor to v1.7.269 ([PR #33518](https://github.com/microsoft/fluentui/pull/33518) by beachball) + ## [8.13.150](https://github.com/microsoft/fluentui/tree/@fluentui/react-docsite-components_v8.13.150) Wed, 25 Dec 2024 07:21:56 GMT diff --git a/packages/react-docsite-components/package.json b/packages/react-docsite-components/package.json index 3c3d59cde2526..270e70065522b 100644 --- a/packages/react-docsite-components/package.json +++ b/packages/react-docsite-components/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-docsite-components", - "version": "8.13.150", + "version": "8.13.151", "description": "Fluent UI React components for building documentation sites.", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -42,7 +42,7 @@ "@fluentui/public-docsite-setup": "^0.3.34", "@fluentui/react-hooks": "^8.8.16", "@fluentui/set-version": "^8.2.23", - "@fluentui/react-monaco-editor": "^1.7.268", + "@fluentui/react-monaco-editor": "^1.7.269", "color-check": "0.0.2", "markdown-to-jsx": "^7.0.0", "office-ui-fabric-core": "^11.0.0", diff --git a/packages/react-examples/package.json b/packages/react-examples/package.json index 7500fb3bdea62..e1f86fe7dba5b 100644 --- a/packages/react-examples/package.json +++ b/packages/react-examples/package.json @@ -36,8 +36,8 @@ "@fluentui/merge-styles": "^8.6.13", "@fluentui/react": "^8.122.2", "@fluentui/react-cards": "^0.205.191", - "@fluentui/react-charting": "^5.23.30", - "@fluentui/react-docsite-components": "^8.13.150", + "@fluentui/react-charting": "^5.23.31", + "@fluentui/react-docsite-components": "^8.13.151", "@fluentui/react-experiments": "^8.14.188", "@fluentui/react-file-type-icons": "^8.12.7", "@fluentui/react-focus": "^8.9.20", diff --git a/packages/react-monaco-editor/CHANGELOG.json b/packages/react-monaco-editor/CHANGELOG.json index de58bcfb15944..a7a0bd2fd0049 100644 --- a/packages/react-monaco-editor/CHANGELOG.json +++ b/packages/react-monaco-editor/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@fluentui/react-monaco-editor", "entries": [ + { + "date": "Thu, 26 Dec 2024 07:21:14 GMT", + "tag": "@fluentui/react-monaco-editor_v1.7.269", + "version": "1.7.269", + "comments": { + "patch": [ + { + "author": "beachball", + "package": "@fluentui/react-monaco-editor", + "comment": "Bump @fluentui/react-charting to v5.23.31", + "commit": "0dd9a713b54a6d5b5929ac7febd1c7e44c83efca" + } + ] + } + }, { "date": "Wed, 25 Dec 2024 07:21:56 GMT", "tag": "@fluentui/react-monaco-editor_v1.7.268", diff --git a/packages/react-monaco-editor/CHANGELOG.md b/packages/react-monaco-editor/CHANGELOG.md index 248cdd46384ed..57d5169f3a74b 100644 --- a/packages/react-monaco-editor/CHANGELOG.md +++ b/packages/react-monaco-editor/CHANGELOG.md @@ -1,9 +1,18 @@ # Change Log - @fluentui/react-monaco-editor -This log was last generated on Wed, 25 Dec 2024 07:21:56 GMT and should not be manually modified. +This log was last generated on Thu, 26 Dec 2024 07:21:14 GMT and should not be manually modified. +## [1.7.269](https://github.com/microsoft/fluentui/tree/@fluentui/react-monaco-editor_v1.7.269) + +Thu, 26 Dec 2024 07:21:14 GMT +[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-monaco-editor_v1.7.268..@fluentui/react-monaco-editor_v1.7.269) + +### Patches + +- Bump @fluentui/react-charting to v5.23.31 ([PR #33518](https://github.com/microsoft/fluentui/pull/33518) by beachball) + ## [1.7.268](https://github.com/microsoft/fluentui/tree/@fluentui/react-monaco-editor_v1.7.268) Wed, 25 Dec 2024 07:21:56 GMT diff --git a/packages/react-monaco-editor/package.json b/packages/react-monaco-editor/package.json index 627aac1d5546b..863b640d1168a 100644 --- a/packages/react-monaco-editor/package.json +++ b/packages/react-monaco-editor/package.json @@ -1,6 +1,6 @@ { "name": "@fluentui/react-monaco-editor", - "version": "1.7.268", + "version": "1.7.269", "description": "Live React example editing using monaco", "main": "lib-commonjs/index.js", "module": "lib/index.js", @@ -34,7 +34,7 @@ "@fluentui/example-data": "^8.4.25", "@fluentui/monaco-editor": "^1.3.24", "@fluentui/react-hooks": "^8.8.16", - "@fluentui/react-charting": "^5.23.30", + "@fluentui/react-charting": "^5.23.31", "raw-loader": "4.0.2", "react-syntax-highlighter": "^10.1.3", "tslib": "^2.1.0" From 6a70a11ddb8bac592c4c9b4c12a2705a9ace6686 Mon Sep 17 00:00:00 2001 From: "Atishay Jain (atisjai)" <98592573+AtishayMsft@users.noreply.github.com> Date: Thu, 26 Dec 2024 18:31:23 +0530 Subject: [PATCH 20/24] feat(react-charting): Support changing legends programatically at runtime and bug fixes (#33519) --- ...-14c34b26-6050-4fa3-8ab9-ccfc1661f953.json | 7 ++ .../react-charting/etc/react-charting.api.md | 1 + .../components/AreaChart/AreaChart.base.tsx | 8 +- .../DeclarativeChart/DeclarativeChart.tsx | 49 ++++++--- .../DeclarativeChart/PlotlySchemaAdapter.ts | 24 ++++- .../components/DonutChart/DonutChart.base.tsx | 11 +- .../components/GaugeChart/GaugeChart.base.tsx | 8 ++ .../GroupedVerticalBarChart.base.tsx | 8 ++ .../HeatMapChart/HeatMapChart.base.tsx | 8 ++ .../HorizontalBarChartWithAxis.base.tsx | 8 ++ .../components/LineChart/LineChart.base.tsx | 13 ++- .../SankeyChart/SankeyChart.base.tsx | 1 + .../SankeyChart/SankeyChart.types.ts | 6 ++ .../VerticalBarChart.base.tsx | 8 ++ .../VerticalStackedBarChart.base.tsx | 6 ++ .../DeclarativeChart.Basic.Example.tsx | 101 +++++++++++++----- 16 files changed, 223 insertions(+), 44 deletions(-) create mode 100644 change/@fluentui-react-charting-14c34b26-6050-4fa3-8ab9-ccfc1661f953.json diff --git a/change/@fluentui-react-charting-14c34b26-6050-4fa3-8ab9-ccfc1661f953.json b/change/@fluentui-react-charting-14c34b26-6050-4fa3-8ab9-ccfc1661f953.json new file mode 100644 index 0000000000000..dc02c066b09c8 --- /dev/null +++ b/change/@fluentui-react-charting-14c34b26-6050-4fa3-8ab9-ccfc1661f953.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Support changing legends programatically at runtime and bug fixes", + "packageName": "@fluentui/react-charting", + "email": "atishay.jain@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/packages/charts/react-charting/etc/react-charting.api.md b/packages/charts/react-charting/etc/react-charting.api.md index f07cb027b9303..a9793c3c65d41 100644 --- a/packages/charts/react-charting/etc/react-charting.api.md +++ b/packages/charts/react-charting/etc/react-charting.api.md @@ -1228,6 +1228,7 @@ export interface ISankeyChartData { export interface ISankeyChartProps { accessibility?: ISankeyChartAccessibilityProps; borderColorsForNodes?: string[]; + calloutProps?: Partial; className?: string; colorsForNodes?: string[]; componentRef?: IRefObject; diff --git a/packages/charts/react-charting/src/components/AreaChart/AreaChart.base.tsx b/packages/charts/react-charting/src/components/AreaChart/AreaChart.base.tsx index 578261e346084..227eb8686eaac 100644 --- a/packages/charts/react-charting/src/components/AreaChart/AreaChart.base.tsx +++ b/packages/charts/react-charting/src/components/AreaChart/AreaChart.base.tsx @@ -162,7 +162,13 @@ export class AreaChartBase extends React.Component = HTMLDivElement, DeclarativeChartProps >((props, forwardedRef) => { - const { plotlySchema } = props.chartSchema; - const { data, layout, selectedLegends } = plotlySchema; + const { plotlySchema } = sanitizeJson(props.chartSchema); + const { data, layout } = plotlySchema; + let { selectedLegends } = plotlySchema; const xValues = data[0].x; const isXDate = isDateArray(xValues); const isXNumber = isNumberArray(xValues); @@ -92,7 +95,11 @@ export const DeclarativeChart: React.FunctionComponent = const isDarkTheme = theme?.isInverted ?? false; const chartRef = React.useRef(null); - const [activeLegends, setActiveLegends] = React.useState(selectedLegends ?? []); + if (!isArrayOrTypedArray(selectedLegends)) { + selectedLegends = []; + } + + const [activeLegends, setActiveLegends] = React.useState(selectedLegends); const onActiveLegendsChange = (keys: string[]) => { setActiveLegends(keys); if (props.onSchemaChange) { @@ -100,10 +107,18 @@ export const DeclarativeChart: React.FunctionComponent = } }; + React.useEffect(() => { + // eslint-disable-next-line @typescript-eslint/no-shadow + const { plotlySchema } = sanitizeJson(props.chartSchema); + // eslint-disable-next-line @typescript-eslint/no-shadow + const { selectedLegends } = plotlySchema; + setActiveLegends(selectedLegends ?? []); + }, [props.chartSchema]); + const legendProps = { canSelectMultipleLegends: false, onChange: onActiveLegendsChange, - ...(activeLegends.length > 0 && { selectedLegend: activeLegends[0] }), + selectedLegend: activeLegends.slice(0, 1)[0], }; const exportAsImage = React.useCallback( @@ -129,8 +144,10 @@ export const DeclarativeChart: React.FunctionComponent = return ( ); case 'bar': @@ -141,6 +158,7 @@ export const DeclarativeChart: React.FunctionComponent = {...transformPlotlyJsonToHorizontalBarWithAxisProps(plotlySchema, colorMap, isDarkTheme)} legendProps={legendProps} componentRef={chartRef} + calloutProps={{ layerProps: { eventBubblingEnabled: true } }} /> ); } else { @@ -150,6 +168,7 @@ export const DeclarativeChart: React.FunctionComponent = {...transformPlotlyJsonToGVBCProps(plotlySchema, colorMap, isDarkTheme)} legendProps={legendProps} componentRef={chartRef} + calloutProps={{ layerProps: { eventBubblingEnabled: true } }} /> ); } @@ -158,6 +177,7 @@ export const DeclarativeChart: React.FunctionComponent = {...transformPlotlyJsonToVSBCProps(plotlySchema, colorMap, isDarkTheme)} legendProps={legendProps} componentRef={chartRef} + calloutProps={{ layerProps: { eventBubblingEnabled: true } }} /> ); } @@ -170,18 +190,16 @@ export const DeclarativeChart: React.FunctionComponent = {...transformPlotlyJsonToScatterChartProps({ data, layout }, true, colorMap, isDarkTheme)} legendProps={legendProps} componentRef={chartRef} + calloutProps={{ layerProps: { eventBubblingEnabled: true } }} /> ); } return ( ); } @@ -190,6 +208,7 @@ export const DeclarativeChart: React.FunctionComponent = {...transformPlotlyJsonToVSBCProps(plotlySchema, colorMap, isDarkTheme)} legendProps={legendProps} componentRef={chartRef} + calloutProps={{ layerProps: { eventBubblingEnabled: true } }} /> ); case 'heatmap': @@ -198,6 +217,7 @@ export const DeclarativeChart: React.FunctionComponent = {...transformPlotlyJsonToHeatmapProps(plotlySchema)} legendProps={legendProps} componentRef={chartRef} + calloutProps={{ layerProps: { eventBubblingEnabled: true } }} /> ); case 'sankey': @@ -205,6 +225,7 @@ export const DeclarativeChart: React.FunctionComponent = ); case 'indicator': @@ -214,6 +235,7 @@ export const DeclarativeChart: React.FunctionComponent = {...transformPlotlyJsonToGaugeProps(plotlySchema, colorMap, isDarkTheme)} legendProps={legendProps} componentRef={chartRef} + calloutProps={{ layerProps: { eventBubblingEnabled: true } }} /> ); } @@ -224,10 +246,11 @@ export const DeclarativeChart: React.FunctionComponent = {...transformPlotlyJsonToVBCProps(plotlySchema, colorMap, isDarkTheme)} legendProps={legendProps} componentRef={chartRef} + calloutProps={{ layerProps: { eventBubblingEnabled: true } }} /> ); default: - return
Unsupported Schema
; + throw new Error('Unsupported chart schema'); } }); DeclarativeChart.displayName = 'DeclarativeChart'; diff --git a/packages/charts/react-charting/src/components/DeclarativeChart/PlotlySchemaAdapter.ts b/packages/charts/react-charting/src/components/DeclarativeChart/PlotlySchemaAdapter.ts index 1339f1827c2be..471db94b0c098 100644 --- a/packages/charts/react-charting/src/components/DeclarativeChart/PlotlySchemaAdapter.ts +++ b/packages/charts/react-charting/src/components/DeclarativeChart/PlotlySchemaAdapter.ts @@ -259,7 +259,6 @@ export const transformPlotlyJsonToVBCProps = ( chartTitle: typeof layout?.title === 'string' ? layout?.title : '', // width: layout?.width, // height: layout?.height, - // hideLegend: true, barWidth: 24, supportNegativeData: true, }; @@ -505,11 +504,32 @@ export const transformPlotlyJsonToGaugeProps = ( }; }; +const MAX_DEPTH = 8; +export const sanitizeJson = (jsonObject: any, depth: number = 0): any => { + if (depth > MAX_DEPTH) { + throw new Error('Maximum json depth exceeded'); + } + + if (typeof jsonObject === 'object' && jsonObject !== null) { + for (const key in jsonObject) { + if (jsonObject.hasOwnProperty(key)) { + if (typeof jsonObject[key] === 'string') { + jsonObject[key] = jsonObject[key].replace(//g, '>'); + } else { + jsonObject[key] = sanitizeJson(jsonObject[key], depth + 1); + } + } + } + } + + return jsonObject; +}; + function isTypedArray(a: any) { return ArrayBuffer.isView(a) && !(a instanceof DataView); } -function isArrayOrTypedArray(a: any) { +export function isArrayOrTypedArray(a: any) { return Array.isArray(a) || isTypedArray(a); } diff --git a/packages/charts/react-charting/src/components/DonutChart/DonutChart.base.tsx b/packages/charts/react-charting/src/components/DonutChart/DonutChart.base.tsx index fb747b57d5fef..e1bdcc6cef078 100644 --- a/packages/charts/react-charting/src/components/DonutChart/DonutChart.base.tsx +++ b/packages/charts/react-charting/src/components/DonutChart/DonutChart.base.tsx @@ -78,7 +78,7 @@ export class DonutChartBase extends React.Component 0, + }); + } + /** note that height and width are not used to resize or set as dimesions of the chart, - * fitParentContainer is responisble for setting the height and width or resizing of the svg/chart + * fitParentContainer is responsible for setting the height and width or resizing of the svg/chart */ if ( prevProps.height !== this.props.height || diff --git a/packages/charts/react-charting/src/components/SankeyChart/SankeyChart.base.tsx b/packages/charts/react-charting/src/components/SankeyChart/SankeyChart.base.tsx index 721d9ea33f543..163ce0796fb1e 100644 --- a/packages/charts/react-charting/src/components/SankeyChart/SankeyChart.base.tsx +++ b/packages/charts/react-charting/src/components/SankeyChart/SankeyChart.base.tsx @@ -834,6 +834,7 @@ export class SankeyChartBase extends React.Component; + + /** + * props for the callout in the chart + */ + calloutProps?: Partial; } /** diff --git a/packages/charts/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx b/packages/charts/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx index 5159a77012108..5a01b1ac417d6 100644 --- a/packages/charts/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx +++ b/packages/charts/react-charting/src/components/VerticalBarChart/VerticalBarChart.base.tsx @@ -140,6 +140,14 @@ export class VerticalBarChartBase this._cartesianChartRef = React.createRef(); } + public componentDidUpdate(prevProps: IVerticalBarChartProps): void { + if (prevProps.legendProps?.selectedLegend !== this.props.legendProps?.selectedLegend) { + this.setState({ + selectedLegend: this.props.legendProps?.selectedLegend ?? '', + }); + } + } + public render(): JSX.Element { this._adjustProps(); this._xAxisLabels = this._points.map((point: IVerticalBarChartDataPoint) => point.x as string); diff --git a/packages/charts/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.base.tsx b/packages/charts/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.base.tsx index 72f8436f71293..06bcd655861c8 100644 --- a/packages/charts/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.base.tsx +++ b/packages/charts/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.base.tsx @@ -170,6 +170,12 @@ export class VerticalStackedBarChartBase } public componentDidUpdate(prevProps: IVerticalStackedBarChartProps): void { + if (prevProps.legendProps?.selectedLegend !== this.props.legendProps?.selectedLegend) { + this.setState({ + selectedLegend: this.props.legendProps?.selectedLegend ?? '', + }); + } + if ( prevProps.height !== this.props.height || prevProps.width !== this.props.width || diff --git a/packages/react-examples/src/react-charting/DeclarativeChart/DeclarativeChart.Basic.Example.tsx b/packages/react-examples/src/react-charting/DeclarativeChart/DeclarativeChart.Basic.Example.tsx index ec0d58eabee23..4009fddcc5287 100644 --- a/packages/react-examples/src/react-charting/DeclarativeChart/DeclarativeChart.Basic.Example.tsx +++ b/packages/react-examples/src/react-charting/DeclarativeChart/DeclarativeChart.Basic.Example.tsx @@ -1,11 +1,39 @@ import * as React from 'react'; import { Dropdown, IDropdownOption } from '@fluentui/react/lib/Dropdown'; -import { Toggle } from '@fluentui/react/lib/Toggle'; +import { TextField, ITextFieldStyles } from '@fluentui/react/lib/TextField'; import { DeclarativeChart, DeclarativeChartProps, IDeclarativeChart, Schema } from '@fluentui/react-charting'; +interface IErrorBoundaryProps { + children: React.ReactNode; +} + +interface IErrorBoundaryState { + hasError: boolean; + error: string; +} + +class ErrorBoundary extends React.Component { + public static getDerivedStateFromError(error: Error) { + // Update state so the next render will show the fallback UI. + return { hasError: true, error: `${error.message} ${error.stack}` }; + } + + constructor(props: IErrorBoundaryProps) { + super(props); + this.state = { hasError: false, error: '' }; + } + + public render() { + if (this.state.hasError) { + return

${this.state.error}

; + } + + return this.props.children; + } +} + interface IDeclarativeChartState { selectedChoice: string; - preSelectLegends: boolean; selectedLegends: string; } @@ -37,6 +65,8 @@ const schemas: any[] = [ const dropdownStyles = { dropdown: { width: 200 } }; +const textFieldStyles: Partial = { root: { maxWidth: 300 } }; + function fileSaver(url: string) { const saveLink = document.createElement('a'); saveLink.href = url; @@ -48,16 +78,26 @@ function fileSaver(url: string) { export class DeclarativeChartBasicExample extends React.Component<{}, IDeclarativeChartState> { private _declarativeChartRef: React.RefObject; + private _lastKnownValidLegends: string[] | undefined; constructor(props: DeclarativeChartProps) { super(props); + const defaultselection = 'donutchart'; + const selectedPlotlySchema = this._getSchemaByKey(defaultselection); + const { selectedLegends } = selectedPlotlySchema; this.state = { - selectedChoice: 'donutchart', - preSelectLegends: false, - selectedLegends: '', + selectedChoice: defaultselection, + selectedLegends: JSON.stringify(selectedLegends), }; this._declarativeChartRef = React.createRef(); + this._lastKnownValidLegends = selectedLegends; + } + + public componentDidMount() { + document.addEventListener('contextmenu', e => { + e.preventDefault(); + }); } public render(): JSX.Element { @@ -65,16 +105,21 @@ export class DeclarativeChartBasicExample extends React.Component<{}, IDeclarati } private _onChange = (ev: React.FormEvent, option: IDropdownOption): void => { - this.setState({ selectedChoice: option.key as string, selectedLegends: '' }); + const selectedPlotlySchema = this._getSchemaByKey(option.key as string); + const { selectedLegends } = selectedPlotlySchema; + this.setState({ selectedChoice: option.key as string, selectedLegends: JSON.stringify(selectedLegends) }); }; - private _onTogglePreselectLegends = (ev: React.MouseEvent, checked: boolean) => { - this.setState({ preSelectLegends: checked }); + private _onSelectedLegendsEdited = ( + event: React.FormEvent, + newValue?: string, + ): void => { + this.setState({ selectedLegends: newValue ?? '' }); }; private _handleChartSchemaChanged = (eventData: Schema) => { const { selectedLegends } = eventData.plotlySchema; - this.setState({ selectedLegends: selectedLegends.join(', ') }); + this.setState({ selectedLegends: JSON.stringify(selectedLegends) }); }; private _getSchemaByKey(key: string): any { @@ -83,17 +128,23 @@ export class DeclarativeChartBasicExample extends React.Component<{}, IDeclarati } private _createDeclarativeChart(): JSX.Element { - const selectedPlotlySchema = this._getSchemaByKey(this.state.selectedChoice); - const uniqueKey = `${this.state.selectedChoice}_${this.state.preSelectLegends}`; - let inputSchema: Schema = { plotlySchema: selectedPlotlySchema }; - - if (this.state.preSelectLegends === false) { - const { data, layout } = selectedPlotlySchema; - inputSchema = { plotlySchema: { data, layout } }; + const uniqueKey = `${this.state.selectedChoice}`; + const currentPlotlySchema = this._getSchemaByKey(this.state.selectedChoice); + const { data, layout } = currentPlotlySchema; + if (this.state.selectedLegends === '') { + this._lastKnownValidLegends = undefined; + } else { + try { + this._lastKnownValidLegends = JSON.parse(this.state.selectedLegends); + } catch (error) { + // Nothing to do here + } } + const plotlySchema = { data, layout, selectedLegends: this._lastKnownValidLegends }; + const inputSchema: Schema = { plotlySchema }; return ( - <> +
    -